Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

Медленное обновление БД   Найти похожие ветки 

 
kreyl   (2006-04-26 00:01) [0]

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

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

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


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

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


 
MsGuns ©   (2006-04-26 13:35) [2]

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

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


 
Johnmen ©   (2006-04-26 13:39) [3]


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


Быстрее.


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

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


 
MsGuns ©   (2006-04-26 14:10) [5]

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

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


 
Johnmen ©   (2006-04-26 14:17) [6]


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


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


 
Slym ©   (2006-04-28 05:18) [7]

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


 
Slym ©   (2006-04-28 05:34) [8]

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.016 c
4-1143146463
Lucefer
2006-03-23 23:41
2006.06.25
Вопросы по обмену сообщениями между TThread ами


2-1149659506
Adrea
2006-06-07 09:51
2006.06.25
Графика


5-1134112164
Dioman
2005-12-09 10:09
2006.06.25
как получить хэндл текущего активного окна виндов ?


15-1148501900
Yorick1986
2006-05-25 00:18
2006.06.25
За сколько можно продать ноутбук


1-1147968131
@LeX-I
2006-05-18 20:02
2006.06.25
Проблема выделения текста в RichEdit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский