Ответ
Индекс по колонке age стоит создавать, если выполняются все условия:
- Таблица большая (десятки/сотни тысяч строк и более).
- Часто выполняются запросы с фильтрацией или сортировкой по возрасту (
WHERE,ORDER BY,GROUP BY). - Столбец обладает достаточной селективностью (значения распределены относительно равномерно, а не 90% записей имеют
age=30).
Пример создания индекса:
CREATE INDEX idx_users_age ON users(age);
-- Для составных запросов (age + city)
CREATE INDEX idx_users_age_city ON users(age, city_id);
Когда индекс НЕ нужен или вреден:
- Маленькая таблица: Полное сканирование (Full Scan) будет быстрее.
- Частые операции DML (INSERT/UPDATE/DELETE): Каждое изменение потребует обновления индекса, что замедлит запись.
- Низкая селективность: Если по условию
WHERE age > 18отбирается 95% строк, индекс, скорее всего, не будет использован.
Типичные запросы, выигрывающие от индекса:
-- Точечный поиск (если селективность высока)
SELECT * FROM users WHERE age = 25;
-- Диапазонный поиск
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
-- Сортировка
SELECT * FROM users ORDER BY age LIMIT 100;
Решение: Анализируйте планы запросов (EXPLAIN) и профилируйте нагрузку перед созданием индекса.