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

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

Запрос SQL к Access - как ускорить работу? [D7]


UnDISCOvery ©   (2006-01-12 15:53:00) 

Алоха, Мастера!
Какими средствами можно ускорить обновление большего числа записей? Пока делаю так - по очереди вызываю 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;
?


msguns   (2006-01-13 09:04:00) [1]

2


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

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

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


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

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


evvcom   (2006-01-12 17:17:00) [4]

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;';


ANB   (2006-01-12 17:15:00) [5]

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


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

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

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


msguns   (2006-01-12 16:33:00) [7]

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


Silver...   (2006-01-12 16:31:00) [8]


> :MyID

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

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


Наверх

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