Главная страница
    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.008 c
2-1149685074
AlexanderMS
2006-06-07 16:57
2006.06.25
Как хранится переменная типа String в памяти.


15-1149004065
Андреййй
2006-05-30 19:47
2006.06.25
GPS из под Delphi


15-1149056419
Piero
2006-05-31 10:20
2006.06.25
обновление программы


6-1140019622
Хинт
2006-02-15 19:07
2006.06.25
Отправить сообщение серверу и получить ответ


2-1149687624
mfender
2006-06-07 17:40
2006.06.25
TWebBrowser: перехват собитий (OnMouseDown)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский