Мне нужно вставить 800000 записей в таблицу MS Access. Я использую Delphi 2007 и компоненты TAdoXxxx
. Таблица содержит несколько целочисленных полей, одно поле с плавающей запятой и одно текстовое поле только с одним символом. Существует первичный ключ для одного из целочисленных полей (которое не является autoinc) и два индекса для другого целого числа и поля с плавающей запятой.
Вставка данных с использованием AdoTable.AppendRecord(...)
занимает> 10 минут, что неприемлемо, поскольку это делается каждый раз, когда пользователь начинает использовать новую базу данных с программой. Я не могу предварительно заполнить таблицу, потому что данные поступают из другой базы данных (к которой нет доступа через ADO
).
Мне удалось сократить примерно до 1 минуты, записав записи в текстовый файл, разделенный табуляцией, и используя объект tAdoCommand
для выполнения.
insert into table (...) select * from [filename.txt] in "c:\somedir" "Text;HDR=Yes"
Но мне не нравятся накладные расходы.
Думаю, должен быть лучший способ.
РЕДАКТИРОВАТЬ:
Некоторая дополнительная информация:
- MS Access был выбран потому, что он не требует дополнительной установки на целевой машине (компьютерах), а вся база данных содержится в одном файле, который можно легко скопировать.
- Это однопользовательское приложение.
- Данные будут вставлены только один раз и не изменятся в течение всего времени существования базы данных. Тем не менее, таблица содержит одно дополнительное поле, которое используется в качестве флага, чтобы указать, что соответствующая запись в другой базе данных была обработана пользователем.
- Одна минута достаточно приемлема (до 3 минут тоже подойдет), и мое решение работает, но мне оно кажется слишком сложным, поэтому я подумал, что должен быть более простой способ сделать это.
- После вставки данных производительность таблицы достаточно высока.
- Когда я начал планировать/внедрять функцию работы программы с БД Access, таблица была не нужна. Это стало необходимо только позже, когда заказчик запросил другую функцию. (Разве это не всегда так?)
РЕДАКТИРОВАТЬ:
Из всех ответов, которые я получил до сих пор, кажется, что у меня уже есть самый быстрый метод для вставки такого большого количества данных в таблицу Access. Спасибо всем, я ценю вашу помощь.