Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизЗапрос 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 оракловые. Ищи в аксесе подобные. В DelphiParamByName("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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c