Ответ
Кардинальность индекса — это оценка уникальности значений в индексируемом столбце или комбинации столбцов. Она показывает, насколько эффективно индекс может отфильтровать строки.
Уровни кардинальности:
- Высокая: Столбец содержит много уникальных или почти уникальных значений (например,
email,primary key). Индекс очень эффективен. - Низкая: Столбец содержит мало уникальных значений (например,
gender,status). Индекс может быть неэффективен, и оптимизатор СУБД может его проигнорировать.
Пример в SQL:
-- Высокая кардинальность: индекс очень полезен
CREATE INDEX idx_user_email ON users(email);
-- Низкая кардинальность: индекс, скорее всего, бесполезен для поиска по одному статусу
CREATE INDEX idx_order_status ON orders(status); -- status может быть 'new', 'processed', 'shipped'
-- Комбинированный индекс может иметь хорошую кардинальность
CREATE INDEX idx_status_created ON orders(status, created_at);
Почему это важно для оптимизатора запросов? Оптимизатор использует статистику по кардинальности, чтобы решить:
- Использовать ли индекс или выполнить полное сканирование таблицы.
- Какой индекс выбрать, если доступно несколько.
- Порядок соединения таблиц (JOIN). Индекс с высокой кардинальностью лучше сужает поиск.