首页 > 解决方案 > 在 DBF 中提取的最佳方法

问题描述

我有 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

此方法有效,但提取数据需要时间。是否有其他解决方法可以使我当前的提取过程更快。

标签: foxpro

解决方案


在您的示例中,将为 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 可打开的任何文件都不能大于此限制的限制。


推荐阅读