在DBF中提取的最佳方法

时间:2018-05-29 06:34:31

标签: foxpro

我有3个Dbf文件,文件大小各在2 GB到1.8 GB之间。通常,他们给我一个列表然后将其提取到3 dbf文件。我使用下面的代码来提取

Select * from dfbfile_1 where itemcode in (select itemcode from itemlist) into table tmp_1
Select * from dfbfile_2 where itemcode in (select itemcode from itemlist) into table tmp_2
Select * from dfbfile_3 where itemcode in (select itemcode from itemlist) into table tmp_3
close database all
use tmp_1
append from tmp_2
append from tmp3

此方法正在运行,但提取数据需要时间。是否有其他工作可以加快我目前的提取过程。

1 个答案:

答案 0 :(得分:0)

在您的示例中,将为dfbfile_1,dfbfile_2和dfbfile_3中的每一行执行子查询,即(SELECT ITEMCODE FROM ITEMLIST)。如果itemlist.itemcode上没有索引,那将特别糟糕。所以以下内容可能会更好。

假设dfbfile_1,dfbfile_2和dfbfile_3是相同的结构:

Select dfbfile_1.* from dfbfile_1 left join itemlist on itemlist.itemcode = f1.itemcode;
union select dfbfile_2.* from dfbfile_2 left join itemlist on itemlist.itemcode = dfbfile_2.itemcode;
union select dfbfile_3.* from dfbfile_3 left join itemlist on itemlist.itemcode = dfbfile_3.itemcode;
into dbf tmp_1

但是,如果这导致tmp_1.dbf为> 2GB然后你会收到一个错误。没有办法解决VFP可以打开的任何文件都不能大于此的限制。