Ответ
Ограничения на количество индексов зависят от конкретной СУБД и движка хранения.
MySQL (InnoDB):
- Максимум индексов на таблицу: 64 вторичных индекса.
- Максимум столбцов во всех индексах: 1017 (ранее 1024).
- Ограничение длины ключа индекса: 3072 байта.
Пример создания таблицы с индексами:
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
country_code CHAR(2),
INDEX idx_username (username),
INDEX idx_email (email),
INDEX idx_country (country_code)
);
PostgreSQL: Не имеет жесткого встроенного лимита, но практические ограничения накладываются производительностью и дисковым пространством.
Практические рекомендации (универсальные):
- Качество важнее количества: Создавайте индексы для столбцов, используемых в условиях
WHERE,JOINиORDER BY. - Накладные расходы: Каждый индекс замедляет операции
INSERT,UPDATE,DELETE, так как его структуру данных (например, B-дерево) также необходимо обновлять. - Оптимальное число: Для большинства таблиц достаточно 5-10 осмысленных индексов. Анализируйте медленные запросы с помощью
EXPLAINдля целевого создания индексов.