Что такое составной индекс в базе данных
Что проверяют
Понимаете ли вы правило левого префикса и умеете ли выбирать порядок колонок.
Как отвечать
Составной индекс строится по нескольким колонкам сразу. Записи в нём упорядочены сначала по первой колонке, внутри неё по второй и так далее, как в телефонном справочнике по фамилии, затем по имени.
Отсюда главное правило, левый префикс: индекс по колонкам (a, b, c) обслуживает запросы по a, по a и b, по всем трём. Но запрос только по b или только по c им воспользоваться не сможет, потому что записи по этим колонкам не упорядочены. Это ровно как искать в справочнике по имени, не зная фамилии.
Как выбирать порядок колонок:
- сначала колонки со сравнением на равенство, потом колонка с диапазоном. После условия на диапазон следующие колонки индекса для поиска уже не используются, только для чтения значений;
- колонка сортировки ставится после колонок равенства, тогда сортировка выполнится бесплатно;
- более избирательная колонка раньше, при прочих равных.
Почему один составной индекс обычно лучше трёх одиночных: планировщик может объединить несколько индексов, но это дороже, чем один проход. Плюс три индекса это тройная стоимость на каждой записи.
Отдельно стоит назвать покрывающий индекс: если все нужные запросу колонки есть в индексе, до самой таблицы дело не доходит вовсе. В PostgreSQL для этого есть возможность добавить колонки, которые не участвуют в поиске, но хранятся в индексе для чтения.
Практический способ подобрать: посмотреть реальные запросы, выписать наборы условий и сортировок, и строить индексы под них, а не под отдельные колонки.
Где спотыкаются
Создают индексы на каждую колонку по отдельности.
Ставят колонку с диапазоном первой и теряют остальные.
Не учитывают сортировку при выборе порядка.
Не проверяют план и не знают, используется ли индекс вообще.