Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не устраивает скорость работы INSERTов в ADO :-( [D7, Access]


Страницы:   1 2

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... перекинь данные.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо