Size: a a a

2021 May 15

A

Alex in ctodailychat
#fomo
источник

AP

Alexander Panko in ctodailychat
ты хочешь сказать что pg пересобирает индексы даже если update колонки реально ничего не поменял? и вообще update колонки тем же значением создаёт новую версию строки?
источник

A

Alex in ctodailychat
Он не настолько умный, чтобы понять «поменял или нет». Ему сказали «запиши» он записал
источник

AR

Anton Revyako in ctodailychat
я думаю все дявол в mvcc, но я не настолько крут, чтобы рассуждать об этом на серьезных щах )

они посятонняно что-то улучшают и возможно, через некоторое время этот чит потеряет актуальность. например недавно дедубликацию в btree.

но даже если конкретно с индексом все будет хорошо, то есть еще wal, из которого ничего выкинуть нельзя. и он тоже блотится за милую душу )
источник

AP

Alexander Panko in ctodailychat
ну это какие прям простые оптимизации на поверхности, строка уде вычитана, как минимум для простых типов можно и проверить
источник

A

Alex in ctodailychat
плюс апдейт вызывает лок. Поэтому  хак с where f<>1 это ещё и плюс для concurrency
источник

A

Alex in ctodailychat
Строка не вычитана же
источник

A

Alex in ctodailychat
Ну хз не буду утверждать
источник

VG

Valentin Golev in ctodailychat
a command such as UPDATE ... SET x = x ... will fire a trigger on column x, even though the column's value did not change.
источник

VG

Valentin Golev in ctodailychat
как минимум триггеры запускаются, и наверняка много чего еще
источник

AR

Anton Revyako in ctodailychat
абажи. есть 2 разных места - таблица и индекс. и очевидно они по-разному обновляются
источник

VG

Valentin Golev in ctodailychat
а, и еще могу предположить, что  UPDATE ... SET x = константа не может знать че там было, потому что вдруг транзакция какая незакоммитилась еще
источник

AR

Anton Revyako in ctodailychat
ну тут тоже много тонкостей, начиная с уровня изоляции
источник

VG

Valentin Golev in ctodailychat
я думаю тут куда проще и семантически консистентнее не проверять типа "насколько мы уверены", а обновить и записать во все логи
источник

VG

Valentin Golev in ctodailychat
так что нет, это не простая оптимизация, а мина замедленного действия)
источник

AR

Anton Revyako in ctodailychat
я вот прикидываю как бы я это проверял, если бы был разработчиком базы и уже не хочется )
источник

A

Alex in ctodailychat
Плюс не знаю как в pg но в mssql это называется parameter sniffing и Зенит кешировние execution plan-ов

UPDATE .. SET x=@ param
источник

A

Alex in ctodailychat
Блин бедный чел с ником “param”, его все тегают))
источник

AR

Anton Revyako in ctodailychat
ну кеширование планов тут наверное не самое сложное.

мне ваще кажется что просто не у всех в головах есть понимание что таблица это таблица а индекс это индекс. что они лежат в разных местах, апдейтятся не сразу и вот это вот все.

а еще есть разные стораджи для разных колонок.
а еще есть покрывающие индексы
источник

VG

Valentin Golev in ctodailychat
(и что таблица тоже бывает не таблица)
источник