Pull to refresh

Comments 9

В 8-м задании получается, что функция будет вызвана всё же 2 раза, только на втором вызове она упадет.
Ну нет. До вычисления функции дело не дойдет: ошибка возникнет при вычислении её аргумента.
Однако лишь один из победителей викторины заметил, что частичный индекс…
О, это был я, привет! На последней фотке как раз мне вручают билет. :)
Спасибо, интересно.

Однако лишь один из победителей викторины заметил, что частичный индекс

CREATE INDEX ON users ( somefield) WHERE lower(name) = ’vasya’;

где somefield — любое поле таблицы users, тоже окажется эффективен.

Не окажется. PostgreSQL не использует статистику для частичных-индексов, а это значит, что
SELECT * FROM users WHERE lower(name) = 'vasya';

будет планироваться с селективностью по умолчанию. См. рассылку
Да, указанная проблема действительно есть! Однако из этого не следует, что индекс не будет использован. А если он будет использован, он может сильно помочь.
Да, вы правы, будет использован. Если я правильно понимаю PostgreSQL, то индекс будет использован практически всегда, так как селиктивность функции без статистики есть константа (вроде бы 1% или 5%). А это значит, что планировщик загнан в угол, даже если в таблице только 100 миллионов записей, подходящих под lower(name) = 'vasya'. Но в принципе такой индекс имеет право на жизнь, все-таки это пользователи…
Сразу извиняюсь за буквоедство. Термин «покрывающий индекс» не привязан к наличию возможности включать неиндексируемые колонки в состав индекса.
Индекс является покрывающим для некоторой таблицы участвующей в некотором запроса,
если он содержит всю необходимую информацию относительно искомой таблицы для выполнения запроса, тем самым исключая необходимость обращения к таблице.
Для этого может быть достаточно использование подмножества индексируемых колонок.

Конечно же, хорошо когда СУБД позволяет включить неиндексируемые поля в состав индекса (через INCLUDE), тем самым увеличивая возможности создания покрывающих индексов.
Но, строго говоря, это не обязательный атрибут «покрывающего» индекса.
Отличное замечание, спасибо! Текст подправлен.
Sign up to leave a comment.