Как определить, какие запросы задействуют составной индекс

Запросы 1, 3 и 4 естественно используют левую часть B-tree. Для запроса только по Col2 возможность и выгодность зависят от СУБД и плана.

Короткий ответ

Что ответить на собеседовании

Запросы 1, 3 и 4 естественно используют левую часть B-tree. Для запроса только по Col2 возможность и выгодность зависят от СУБД и плана.

Подробный разбор

Ответ с пояснениями

Условие

Вопрос: какие из перечисленных запросов смогут воспользоваться созданным составным индексом?

CREATE INDEX IDX_Composite ON MyTable (Col1, Col2);

1. SELECT * FROM MyTable WHERE Col1 = 1;
2. SELECT * FROM MyTable WHERE Col2 = 2;
3. SELECT * FROM MyTable WHERE Col1 = 1 AND Col2 = 2;
4. SELECT * FROM MyTable WHERE Col2 = 2 AND Col1 = 1;

Разберите каждый запрос и укажите, использует ли он указанный индекс.

Ответ

Запросы 1, 3 и 4 естественно используют левую часть B-tree. Для запроса только по Col2 возможность и выгодность зависят от СУБД и плана.

Порядок условий в WHERE не меняет смысл, поэтому 3 и 4 эквивалентны для оптимизатора. Col1 первым в индексе позволяет искать непрерывный диапазон по этому полю, а Col2 уточняет его.

Категоричное «2 никогда не использует индекс» неверно: возможны сканирование индекса и, например, skip scan в PostgreSQL 18. Но при отсутствии условия на первый столбец это не обязательно выгодно. Наличие подходящего индекса не гарантирует его выбор: проверяйте EXPLAIN и статистику распределения данных.

Источник: www.postgresql.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее