Что такое селективность индекса в базах данных?

Ответ

Селективность индекса (или столбца) в базах данных — это метрика, которая оценивает уникальность данных в этом столбце. Она является ключевым показателем для оптимизатора запросов при выборе наиболее эффективного плана выполнения.

Как рассчитывается?

Селективность вычисляется как отношение количества уникальных значений к общему количеству записей в таблице:
Селективность = (Количество уникальных значений) / (Общее количество записей)

Значение варьируется от 0 до 1. Чем ближе к 1, тем выше селективность.

  • Высокая селективность (близка к 1): Значения в столбце почти не повторяются.
    • Примеры: id, email, passport_number.
  • Низкая селективность (близка к 0): Значения в столбце часто повторяются.
    • Примеры: gender, is_active (boolean), country_code в таблице пользователей одной страны.

Зачем это нужно?

Оптимизатор запросов использует селективность, чтобы решить, использовать ли индекс для поиска данных.

  • При высокой селективности запрос WHERE email = 'test@example.com' вернет очень мало строк. Оптимизатор, скорее всего, выберет Index Scan, так как это будет намного быстрее, чем полный перебор таблицы.
  • При низкой селективности запрос WHERE is_active = true может вернуть половину таблицы. В этом случае чтение индекса и последующий доступ к таблице может быть дороже, чем просто прочитать всю таблицу целиком (Full Table Scan).
-- Запрос по столбцу с ВЫСОКОЙ селективностью. Скорее всего, будет использован индекс.
SELECT * FROM users WHERE id = 12345;

-- Запрос по столбцу с НИЗКОЙ селективностью. Использование индекса маловероятно.
SELECT * FROM users WHERE gender = 'M';

Вывод: Индексы наиболее эффективны для столбцов с высокой селективностью, так как они позволяют быстро отсеять подавляющее большинство строк.