Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

Запрос SQL к Access - как ускорить работу?   Найти похожие ветки 

 
UnDISCOvery   (2006-01-12 15:53) [0]

Алоха, Мастера!
Какими средствами можно ускорить обновление большего числа записей? Пока делаю так - по очереди вызываю ADOCommand - "UPDATE MyTable SET MyFiled = :MyValue WHERE ID = :MyID" для каждой записи (для каждого ID).
Насколько быстрее будет или не будет такая форма - "UPDATE MyTable SET MyFiled = :MyValue WHERE (ID = :MyID1) or (ID = :MyID2  or (ID = :MyID3) or (ID = :MyID4) ...."?

Другими словами - как сделать быстрое пакетное обновление?
Размер пакета несколько тысяч записей.

Какие параметры задать для запроса на выборку этого пакета:
 FQuery.CursorLocation:= clUseServer;
 FQuery.CursorType:= ctOpenForwardOnly;
?


 
Silver... ©   (2006-01-12 16:31) [1]


> :MyID

откуда берешь?

...
UPDATE MyTable SET MyFiled = :MyValue WHERE ID in (SELECET ...)


 
msguns ©   (2006-01-12 16:33) [2]

Реально ускорить пакет одиночных обновлений можно лишь заключив их в одну транзакцию


 
UnDISCOvery   (2006-01-12 17:08) [3]

MyID беру из алгоритма программы, не из БД. Вернее из БД, но условия отбора никак не связаны с БД.

А все-таки что будет быстрее - пакет одиночных обновлений в транзакции или отработка одного сиквел-запроса с монстром позади WHERE?


 
ANB ©   (2006-01-12 17:15) [4]

отработка одного сиквел-запроса


 
evvcom ©   (2006-01-12 17:17) [5]

UPDATE MyTable SET MyFiled = :MyValue WHERE INSTR(:IDS, ";" || TO_CHAR(ID) || ";") > 0
Функции INSTR и TO_CHAR оракловые. Ищи в аксесе подобные. В Delphi
ParamByName("IDS").AsString := ";1;2;3;15;17;45;";


 
UnDISCOvery   (2006-01-12 17:44) [6]

а при условии если в таблице 3 миллиона записей и попробуем поменять, скажем, 5000 записей - тоже быстрее?
Попробовал - нифига не быстрее ... на изменяемом поле индекс, видимо акцесс его долго перестраивает :(


 
UnDISCOvery   (2006-01-12 18:50) [7]

Как будет правильнее и быстрее?

UPDATE MyTable SET MyFiled = :MyValue WHERE ID in (SELECT ID FROM MyTable WHERE MyDateField < :MyDateValue)
или
UPDATE MyTable SET MyFiled = :MyValue WHERE (MyDateField < :MyDateValue)


 
msguns ©   (2006-01-13 09:04) [8]

2



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

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
8-1127324360
NightLord
2005-09-21 21:39
2006.03.05
Web-камера


2-1140185829
Arxangel
2006-02-17 17:17
2006.03.05
Начало работы с FoxPro


1-1138718514
grusty
2006-01-31 17:41
2006.03.05
Как программно выделить строку в ListBox?


15-1139678202
Ученик чародея
2006-02-11 20:16
2006.03.05
Как разрядить бумагу, после ее печати на лазерном принтере?


2-1140047978
Оптим
2006-02-16 02:59
2006.03.05
Как сделать case для строк в 4 символа?