Ответ
Создание эффективного индекса требует анализа запросов и данных. Основные критерии:
- Нагрузка запросов: Индексируйте столбцы, которые часто фигурируют в условиях
WHERE,JOIN,ORDER BY,GROUP BY. - Селективность: Приоритет — столбцы с высоким количеством уникальных значений (например,
id,email). Индекс по полю с двумя значениями (gender) почти бесполезен. - Тип индекса:
- B-tree — для диапазонов (
BETWEEN,>,<) и сортировки. - Hash — только для точного совпадения (
=). - Составной (композитный) — для условий по нескольким столбцам. Порядок столбцов критичен!
- B-tree — для диапазонов (
- Влияние на запись: Каждый индекс замедляет операции
INSERT,UPDATE,DELETEи увеличивает объем хранилища. Необходим баланс.
Пример составного индекса:
-- Индекс эффективен для запросов с условием по department_id ИЛИ по department_id + salary.
CREATE INDEX idx_emp_dept_salary ON employees (department_id, salary);
Ограничения: Индексы обычно не используются, если:
- В условии применяется функция к столбцу (
WHERE UPPER(name) = '...'). - Используется
LIKEс начальным wildcard ('%text').