Выбор ответа Middle Индексы обновлено

Поиск по подстроке

Вопрос

Какой индекс ускорит WHERE title ILIKE '%ноут%'?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: GIN с gintrgmops из расширения pgtrgm. B-tree ищет по началу ключа и помогает только для префикса (LIKE 'ноут%'), даже с textpatternops.

Варианты ответа

  1. Обычный B-tree по title с text_pattern_ops
  2. GIN с gin_trgm_ops из расширения pg_trgmправильный ответ
  3. B-tree по выражению lower(title)
  4. Hash-индекс по title для поиска подстроки

Разбор

B-tree ищет по началу ключа и помогает только для префикса (LIKE 'ноут%'), даже с text_pattern_ops. Шаблон с % в начале и регистронезависимый поиск ему не по силам, и lower(title) этого не меняет. Hash поддерживает только равенство. Триграммный GIN разбивает строку на тройки символов и умеет LIKE и ILIKE по подстроке.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.