Что такое индексы в базах данных и зачем они нужны
Что проверяют
Понимаете ли вы, что индекс это компромисс: быстрее чтение, дороже запись и место. Дальше почти всегда спрашивают, когда индекс не сработает.
Как отвечать
Индекс это отдельная структура, которая хранит значения колонки в упорядоченном виде вместе со ссылками на строки. Без него база читает всю таблицу, с ним находит нужное за логарифмическое число шагов.
Основной тип это B-дерево: подходит для равенства, диапазонов и сортировки. Есть и другие: хеш (только равенство), полнотекстовый, частичный (индексируется часть строк по условию), составной (несколько колонок), по выражению.
Про составной индекс важно знать правило левого префикса: индекс по (company, created_at) помогает запросу по компании и по паре «компания и дата», но не помогает запросу по одной дате.
Цена: каждый индекс замедляет вставку и обновление, потому что его нужно поддерживать, и занимает место на диске. Поэтому индексируют то, по чему реально фильтруют, соединяют и сортируют, а не все колонки подряд.
Инструмент проверки называть обязательно: EXPLAIN ANALYZE показывает, использовался ли индекс и сколько строк прочитано на самом деле.
Где спотыкаются
Не знают, что функция над колонкой отключает обычный индекс: под WHERE lower(email) = ... нужен индекс по выражению.
Думают, что индекс ускоряет всегда. На маленькой таблице или при выборке большой доли строк планировщик сознательно выберет полное сканирование, и это правильное решение.
Забывают про неиспользуемые индексы: они не ускоряют ничего, но замедляют каждую запись и занимают место.