лучший способ извлечь в DBF - PullRequest
0 голосов
/ 29 мая 2018

У меня есть файл 3 дБф с размером файла от 2 до 1,8 ГБ каждый.обычно они дают мне список, а затем распаковывают его в файл 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 голосов
/ 29 мая 2018

В вашем примере подзапрос, т.е. (SELECT ITEMCODE FROM ITEMLIST) будет выполняться для каждой строки в dfbfile_1, dfbfile_2 и dfbfile_3.Это будет особенно плохо, если на 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 будет> 2 ГБ, вы получитеошибка.Невозможно обойти ограничение, заключающееся в том, что любой файл, открываемый VFP, не может быть больше этого размера.

...