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

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

Медленное обновление БД


kreyl ©   (2006-04-26 00:01:00) 

Delphi2006 + ADO +Access. Программа производит вычисления; их результат являет собой несколько массивов по 15000 чисел в каждом. Эти массивы нужно запихнуть в таблицу БД.
Таблица простая - два столбца, Identity и результат.

Сначала очищаю таблицу запросом, потом открываю dataset к ней с параметром LockType := ltBatchOptimistic; потом отключаюсь от базы и заполняю датасет. Потом подключаюсь к базе и говорю UpdateBatch.

Этот самый апдейт работает очень медленно - минут десять. Размер результирующего mdb файла при этом - меньше 10 МБ. Подскажите, пожалуйста, как быстро внести в БД данные из массива? Может, я структурно что-то делаю неправильно?
Заранее спасибо.


Slym   (2006-04-28 05:34:00) [1]

Я бы делал связку:
Монопольный доступ+2х поточно, с буфером TMemoryStream+ INSERT INTO +prepared


Slym   (2006-04-28 05:18:00) [2]

1. Монопольно открой базу.
2. ltBatchOptimistic - накой тебе это? памяти много?
3. Можно INSERT INTO +prepared
4. Если очень быстро надо временная аля "MemotyTable", или массив, или TMemoryStream, или тупо file of record, а уж в конце можно и в базу лить (смахивает на ltBatchOptimistic).
5. можно 2х поточно... 1 считает и пишет в буфер, 2 пишет в базу


Johnmen   (2006-04-26 14:17:00) [3]


> MsGuns ©   (26.04.06 14:10) [5]


Быстрее. Ибо не надо "обслуживать" набор данных.


MsGuns   (2006-04-26 14:10:00) [4]

>Johnmen ©   (26.04.06 13:39) [3]
>Быстрее.

В общем случае - нет. При правильных установках коннекта и самого датасета практически одни в один, да это и понятно - ведь дельфишный TADODataSet юзает те же самые запросы. "Тормоза" получаются лишь как следствия укправления транзакцией самим датасетом, что тоже "лечится" ;)


Delphi basic   (2006-04-26 13:41:00) [5]

Попробуй, то же самое, но приконнектиться к БД через ODBC (хотя бы ради интереса :)


Johnmen   (2006-04-26 13:39:00) [6]


> MsGuns ©   (26.04.06 13:35) [2]


Быстрее.


MsGuns   (2006-04-26 13:35:00) [7]

>Johnmen ©   (26.04.06 00:47) [1]
>Просто запросом INSERT INTO ...

Одиночными инсертами будет не быстрее, чем TDataSet.Append
Для "бістрой закачки" эффективен выгруз в Эксель и из него средствами SQL в акцешную БД


Johnmen   (2006-04-26 00:47:00) [8]

Просто запросом INSERT INTO ...


Наверх

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