>     Удаление создаёт версию записи и не трогает индексы.
> Инсерт создаёт версию записи и, конечно, трогает индексы
> Апдейт, не затрагивающий индексированные колонки, тоже
> создаёт версию записи и не трогает индексы.

>     Так что получается, что вариант с апдейтом дешевле
> в твоём случае

>     Простой эксперимент тебе поможет ;)

Вчера провел ужасающий по своей
простоте эксперимент - провел
перестройку структуры этой ужасной
таблицы. В течении которой изменились
значения колонок в ~17 и ~25млн записях.
Сборка мусора в 25 млн записях шла чуть
больше одного часа. На нашем мегаконе.

Перевел программу с тупого insert (перед
ним срабатывал триггер, делающий delete)
на вызов SP, которая типа гораздо умнее.

В результате - обновления колонок
входящих в индекс теперь вообще нет.
Удалений, собственно, тоже.

Статистика по одной транзакции.

None - 4839 (вообще ничего не обновлилось)
Update state - 693 (колонки вне индексов)
Insert - 3150

До этого "None"+"Update state" выполнялись как
"Delete"+"Insert"

А таких транзакций от 5 до 20 (не считая
брызг).

Полагаю, теперь индексы этой таблицы
оставлены в покое. Ура!

Таблица используется в репликации и
хранит отображение внешних
идентификаторов объектов на локальные
идентификаторы.

Коваленко Дмитрий.

PS. Впервые с 97(?) года, написал в
плюсовом коде "execute procedure SP(...)" и, О Боже!,
получил обратно OUT-параметр (в котором
говорится, что SP сделала).

И оно работает! Бугагагага :)))

FB CS 1.5.3 (Win 2003)

Ответить