Вы добавили индекс на колонку, но запрос всё равно тормозит? Скорее всего, вы столкнулись с одной из классических ловушек.
Первая: вы обернули колонку в функцию.
WHERE lower(name) = 'pikachu' не использует индекс на name — Postgres видит функцию и идёт читать всю таблицу. Решение — функциональный индекс на lower(name).Вторая: порядок колонок в композитном индексе. Индекс
(type_1, type_2) работает для запросов на type_1 и на обе колонки вместе, но бесполезен для запросов только на type_2.Третья: вы не проверили план запроса.
EXPLAIN ANALYZE показывает, какой индекс реально использовался и сколько времени ушло.Джон Чартер показывает на примерах, как работают частичные индексы с
WHERE и покрывающие с INCLUDE. Без EXPLAIN вы просто гадаете — а база данных не любит угадывать за вас.@prog_point (теперь ещё в VK и Max)
