медленный update
медленный update
Здравствуйте, коллеги!
Помогите, а то туплю что-то...
Использую FIBPlus для доступа к Firebird Embedded.
Есть таблица, 230 тысяч записей, 5 полей числовых.
Надо пробежать по всем записям и в зависимости от условий изменить
два поля в каждой записи.
Без сохранения значений этих полей процесс занимает полторы минуты, с
сохранением - около 11 часов (как предсказывает программа).
Добавляю из FIBQuery:
DM.UniQ3.Transaction.StartTransaction;
DM.UniQ3.SQL.Text := 'UPDATE RESULTS SET IMAGEMARK1 = :IMAGEMARK1, IMAGEMARK2 = :IMAGEMARK2 WHERE ID = :ID';
DM.UniQ3.Prepare;
и потом
(*) DM.UniQ3.ExecWP([NewMark1,NewMark2,DM.UniQ4.Fields[0].AsInteger]);
после всего ещё и
DM.UniQ3.Transaction.Commit;
Если закоментить строку (*), то всё летает... Сделал вывод, что
неправильно делаю апдейт, но не понимаю, где именно. Складывается
ощущение, что коммит происходит на каждой из 230 тыс записей.
Подскажите, что подкрутить?
Помогите, а то туплю что-то...
Использую FIBPlus для доступа к Firebird Embedded.
Есть таблица, 230 тысяч записей, 5 полей числовых.
Надо пробежать по всем записям и в зависимости от условий изменить
два поля в каждой записи.
Без сохранения значений этих полей процесс занимает полторы минуты, с
сохранением - около 11 часов (как предсказывает программа).
Добавляю из FIBQuery:
DM.UniQ3.Transaction.StartTransaction;
DM.UniQ3.SQL.Text := 'UPDATE RESULTS SET IMAGEMARK1 = :IMAGEMARK1, IMAGEMARK2 = :IMAGEMARK2 WHERE ID = :ID';
DM.UniQ3.Prepare;
и потом
(*) DM.UniQ3.ExecWP([NewMark1,NewMark2,DM.UniQ4.Fields[0].AsInteger]);
после всего ещё и
DM.UniQ3.Transaction.Commit;
Если закоментить строку (*), то всё летает... Сделал вывод, что
неправильно делаю апдейт, но не понимаю, где именно. Складывается
ощущение, что коммит происходит на каждой из 230 тыс записей.
Подскажите, что подкрутить?
Re: медленный update
В пропертях компонента транзакции? Не знаю как оно в плюсАх зовётся и что там насчёт автокоммита накручено. А ещё - эти имиджмарки часом не проиндексированы?bolide писал(а): Складывается
ощущение, что коммит происходит на каждой из 230 тыс записей.
Подскажите, что подкрутить?
Re: медленный update
Да там и пропертей то почти нету. Автокоммит есть в FIBQuery, отключен. Есть непонятный TPBMode (tpbDefault, tpbReadCommitted, tpbRepeatableRead) - менял значения, не помогает.Merlin писал(а):В пропертях компонента транзакции? Не знаю как оно в плюсАх зовётся и что там насчёт автокоммита накручено.
Проиндексированы, но я убиваю индексы перед тем, как бежать по записям:Merlin писал(а): А ещё - эти имиджмарки часом не проиндексированы?
Код: Выделить всё
DM.UniQ3.Transaction.StartTransaction;
DM.UniQ3.SQL.Text := 'DROP INDEX IMAGEMARK1_IND;';
DM.UniQ3.ExecQuery;
DM.UniQ3.SQL.Text := 'DROP INDEX IMAGEMARK2_IND;';
DM.UniQ3.ExecQuery;
DM.UniQ3.Transaction.Commit;
Re: медленный update
Нашёл проблему. Забыли ID сделать первичным ключом. Всё перерыл, пока не глянул стейтмент создания таблиц. Проблема была совсем рядом, вобщем, а не там, где я её искал
гм. обнаглели совсем. на Firebird пишут, а про транзакции ни в зуб ногой.Есть непонятный TPBMode (tpbDefault, tpbReadCommitted, tpbRepeatableRead) - менял значения, не помогает.
www.ibase.ru/devinfo/ibtrans.htm
www.ibase.ru/devinfo/ibx.htm
kdv писал(а):гм. обнаглели совсем. на Firebird пишут, а про транзакции ни в зуб ногой.
www.ibase.ru/devinfo/ibtrans.htm
www.ibase.ru/devinfo/ibx.htm
Я всё хочу постепенно отойти от программирования и использовать наёмный труд, да пока выходит с трудом Приходится всё равно самому во всём разбираться.
За ссылки спасибо, пойду читать
Хм, наемный труд? а как ты квалификацию наемного работника определишь? Если даже хелп по используемым компонентам не читаешь?bolide писал(а): Я всё хочу постепенно отойти от программирования и использовать наёмный труд, да пока выходит с трудом Приходится всё равно самому во всём разбираться.
За ссылки спасибо, пойду читать
Квалификацию - по первым результатам труда. Хелп должен читать работник, а не я Мне должно хватать общего представления. Плюс эдакое чутьё... Вот чувстовал я, что не должна операция выполняться 11 часов, должно хватить несколько минут. Пришлось копать... Кажется, потихоньку тема переходит в оффтопик. Можно её закрывать, проблема решена, помощь в виде ссылок получена Спасибо!stix-s писал(а): Хм, наемный труд? а как ты квалификацию наемного работника определишь? Если даже хелп по используемым компонентам не читаешь?
Обновил тему "Обязательно прочитать перед заданием вопроса!": добавил постскриптум.
Мда, поле ID, не указанное как PK - это оригинально .
Мда, поле ID, не указанное как PK - это оригинально .