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

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

Ответ

Индекс — это структура данных, которая ускоряет операции поиска (SELECT с WHERE), соединения (JOIN) и сортировки (ORDER BY) в таблице базы данных. Он работает по принципу книги с алфавитным указателем, позволяя СУБД быстро найти нужные строки без полного сканирования всей таблицы (full table scan).

Основные типы индексов в SQL:

  • B-дерево (B-tree): Наиболее распространенный тип, эффективен для диапазонных запросов и сравнений (=, >, <, BETWEEN).
  • Хэш-индекс: Подходит только для точных совпадений (=), не работает с диапазонами.
  • Составной (композитный) индекс: Создается по нескольким столбцам (например, (last_name, first_name)). Порядок столбцов критически важен.
  • Уникальный индекс: Гарантирует, что все значения в индексируемом столбце уникальны.
  • Полнотекстовый индекс: Используется для эффективного поиска по тексту.

Пример создания и использования в PostgreSQL:

-- Создание индекса
CREATE INDEX idx_users_email ON users(email);
-- Создание составного индекса
CREATE INDEX idx_users_name_dep ON users(last_name, department_id);
-- Создание уникального индекса
CREATE UNIQUE INDEX idx_users_username ON users(username);

-- Запрос, который может использовать индекс idx_users_name_dep
SELECT * FROM users WHERE last_name = 'Ivanov' AND department_id = 5;

Преимущества и недостатки:

Преимущества Недостатки
Резкое ускорение операций чтения. Замедление операций записи (INSERT, UPDATE, DELETE), так как индексы也需要 обновлять.
Ускорение JOIN и ORDER BY. Дополнительное потребление дискового пространства.
Обеспечение уникальности данных (уникальные индексы). Неправильный выбор индексов может не дать эффекта или ухудшить производительность.

Практическое правило: Индексируйте столбцы, которые часто фигурируют в условиях WHERE, JOIN и ORDER BY. Используйте EXPLAIN ANALYZE для анализа плана запроса и эффективности индексов.

Видео-ответы