![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не устраивает скорость работы INSERTов в ADO :-( [D7, Access]
BugMaker © (2004-02-27 11:36:00)Добрый день. Тут возникла необходимость программно перетаскивать данные из Oracle в Access. Причем большое кол- во записей, около 3 миллионов. Так вот, какие- то 10 000 записей (всего три столбца) вставляются минуту (!!!) на P4, 256Мб ( при помощи TADOCommand.Execute и запросе INSERT). Это, друзья мои, как понимать, и вообще, может я чего- то делаю не так? Может есть побыстрее способ... Использование TADOTable.InsertRecord только усугубляет ситуацию, делая это еще в полтора раза медленнее... А с BDE связываться почему- то совсем не хочется :-). Хотя он должен оказаться раза в полтора быстрее...
BugMaker (2004-02-27 12:11:00) [21]Индексов нет, есть только одно лишнее поле- счетчик. Его удаление дало 1 сек выигрыша (вместо 1 мин. 6 сек получлось 1м 5с :-)). Интересно, это ADO такой тормозной, или все они так не любят много инсертов? Так значит, других вариантов нет? Может там данные как- нть блоками писать можно? Вряд ли, конечно, но надежда умирает последней :-). Кстати, прямой импорт через ODBC занимает не более 3 сек :-(.
VLAD-MAL (2004-02-27 12:04:00) [22]Ну, в Access не обязательно через ADO...
Подсказка:
Он и текстовые форматы понимает.
Читаем все из Oracle, в формируем бо-о-льшой текстовый (например, CSV - формата) файл. Все. Если очень хочется, запускаем Access и, (к примеру, через OLE), заставляем его сделать импорт .CSV а затем - экспорт в твой любимый формат.
Удачи.
Vlad (2004-02-27 11:58:00) [23]
> Непеменно нужны данные из датасета, к примеру....
Интересно, чем это вызвано ?
Ну, надо значит надо.
Если в таблице, куда инсерты делаешь, есть индексы, то лучше отключи их на время выполнения загрузки, так быстрее будет.
BugMaker (2004-02-27 11:51:00) [24]2 Sergey13: В Access, потому что юзверя пошли шибко умные, в аксесе запросики делать научились, а может, и просто хотят ковыряться в миллионах строк %)).
2 Vlad: Да, цикл... Пока пробовал даже без оракла, просто генерятся инсерты с произвольными данными, пока для проверки скорости работы. А мысль хорошая, но не устраивает такой вариант. Непеменно нужны данные из датасета, к примеру.... Хотя остается еще вариант послать всех нафиг, и сказать, что это невозможно :-))))
Sergey13 (2004-02-27 11:40:00) [25]2BugMaker (27.02.04 11:36)
А почему именно в аксес?
Vlad (2004-02-27 11:40:00) [26]как данные перетаскиваешь ? Небось цикл по датасету делаешь while not eof ... ?
Есть хороший способ - подлинкуй в базе Аксесс таблицу Oracle, и одним запросом insert into .... select... from... перекинь данные.