Каковы ограничения на количество индексов в таблице базы данных?

«Каковы ограничения на количество индексов в таблице базы данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ограничения на количество индексов зависят от конкретной СУБД и движка хранения.

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 для целевого создания индексов.