Встречается на 20% собеседований по PHP

Что такое индекс

Индекс в контексте баз данных — это структура данных, которая ускоряет операции выборки, вставки, обновления и удаления записей в таблице. Он создается на основе одного или нескольких столбцов и позволяет базе данных эффективно находить строки, соответствующие условиям запроса, без полного сканирования таблицы.

Как работает индекс

Принцип работы индекса аналогичен индексу в книге: вместо чтения всей книги для поиска темы вы обращаетесь к указателю в конце, который показывает нужные страницы. В базе данных индекс хранит значения индексируемых столбцов в отсортированном виде вместе со ссылками на строки таблицы. Это позволяет быстро находить строки по точному значению или диапазону значений.

Без индекса база данных выполняет последовательное сканирование всей таблицы, что для больших объемов данных становится крайне медленным. Индекс же сокращает количество операций ввода-вывода, так как поиск идет по компактной структуре, а не по всей таблице.

Типы индексов

  • B-дерево (B-tree) — универсальный тип, подходит для поиска по точному значению, диапазону, а также для сортировки. Используется по умолчанию в большинстве СУБД.
  • Хэш-индекс — оптимизирован для поиска по точному равенству, но не поддерживает диапазонные запросы и сортировку.
  • Полнотекстовый индекс — предназначен для поиска по текстовым полям, поддерживает морфологию и релевантность.
  • Пространственный индекс — используется для географических данных, например, для поиска точек в заданном радиусе.

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

Преимущества:

  • Ускорение операций чтения (SELECT).
  • Поддержка ограничений уникальности (UNIQUE, PRIMARY KEY).
  • Ускорение операций JOIN и сортировки, если индексы соответствуют условиям.

Недостатки:

  • Замедление операций записи (INSERT, UPDATE, DELETE), так как при каждом изменении данных необходимо обновлять индексы.
  • Дополнительное использование дискового пространства для хранения индексов.
  • Неправильно спроектированные индексы могут ухудшить производительность, если они не соответствуют реальным запросам.

Когда использовать индексы

Индексы стоит создавать для столбцов, которые часто используются в условиях WHERE, JOIN, ORDER BY и GROUP BY. Однако не следует индексировать все подряд: избыточные индексы увеличивают накладные расходы на запись и занимают место. Важно анализировать план выполнения запросов и статистику использования индексов.

Коротко

  • Индекс — это структура данных, ускоряющая поиск и другие операции с таблицей.
  • Основные типы: B-tree, хэш, полнотекстовый, пространственный.
  • Индексы ускоряют чтение, но замедляют запись и требуют дополнительного места.
  • Создавайте индексы осознанно, под конкретные запросы, и следите за их эффективностью.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы