excel 大型CSV文件的选择查询的性能问题

ee7vknir  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(116)

我尝试使用ADO SELECT查询在一个非常大的CSV文件(一百万条记录)中搜索数据,并且在该查询中有一些WHERE子句。
我不能将此数据传输到任何数据库(MySql或SQL Server或MS Access),因为它是每天生成的,我不能每天将其传输到数据库。
我在这个.csv文件中没有任何行ID。如果默认情况下为每个.csv生成一个行ID,请告诉我。
下面是CSV文件数据示例(第一个字段是日期,第二个是时间,第三个是值):

CSV FILE SAMPLE DATA
====================
20130714,170056,1.30764
20130714,170122,1.30743
20130714,170132,1.30744
20130714,170205,1.30743
20130714,170214,1.30744
20130714,170216,1.30743
20130714,170244,1.30744
20130714,170325,1.30744
20130714,170325,1.30743
20130714,170325,1.30743
20130714,170325,1.30742
20130714,170504,1.30741
20130714,170519,1.30741
20130714,170519,1.30739
20130714,170522,1.30739
20130714,170522,1.30732
20130714,170522,1.30722

所有CSV记录都按日期和时间排序。
我使用ADO连接从Excel到CSV文件与此源代码:

strsql = "SELECT * FROM " & sItem & ".csv WHERE F3>=" & trigPrice & " AND (F1 in (SELECT distinct TOP " & trigWin & "  f1 FROM " & sItem & ".csv WHERE (F1>=" & sDay & ")) AND f2>=" & sTime & ")"
Set rs = cn.Execute(strsql)

这个查询需要大约10分钟的时间来执行。我如何减少执行时间?

7bsow1i6

7bsow1i61#

数据库查询可以很快的原因是数据已经被索引-也就是说,它将在一些字段上具有快速查找。当您对原始CSV文件运行"查询"时,ADO引擎必须首先将文本解析为记录,然后再解析为一组记录,然后逐行搜索它们以查找与搜索条件匹配的记录。如果您计划对数据执行多个查询,您还可以将其导入到 IndexedDB 表中,以避免多次解析CSV的重复。

    • 更新**

要从VBA导入CSV文件,您可以使用'DoCmd.TransferText' function。例如,要将CSV文件导入名为"tblData"的表(具有正确的布局),以及从逗号分隔的带标题的CSV导入CSV文件,您可以执行以下操作:

DoCmd.TransferText acImportDelim, , "tblData", "C:\Path\OF\THE.csv", True

这与Access导入向导使用的方法相同。

相关问题