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

Какие индексы знаешь

Индексы — это структуры данных, которые ускоряют операции поиска, выборки и сортировки данных в базах данных, уменьшая количество чтений с диска. Основные типы индексов включают B-Tree, хеш-индексы, инвертированные индексы, пространственные индексы, полнотекстовые индексы и bitmap-индексы. Выбор конкретного типа зависит от характера запросов и модели данных.

Как это работает

Индексы работают по принципу дополнительной структуры, которая хранит отсортированные или хешированные значения ключей вместе с указателями на строки таблицы. При выполнении запроса СУБД сначала обращается к индексу, чтобы найти нужные записи, а затем читает их с диска. Это позволяет избежать полного сканирования таблицы, что особенно важно для больших объёмов данных.

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

B-Tree и B+Tree

Самые распространённые индексы в реляционных базах данных. B-Tree поддерживает точечные и диапазонные запросы, а также сортировку. B+Tree — вариант, где все значения хранятся в листовых узлах, что повышает эффективность диапазонных запросов и последовательного доступа.

Хеш-индексы

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

Инвертированные индексы

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

Пространственные индексы

Оптимизированы для геометрических данных (точки, линии, полигоны). Пример — R-tree. Используются для запросов типа «найти все точки в радиусе».

Полнотекстовые индексы

Поддерживают сложный текстовый поиск: фразы, стоп-слова, морфологию. Пример — FULLTEXT в MySQL. Отличаются от инвертированных индексов тем, что учитывают лингвистические особенности.

Bitmap-индексы

Эффективны для колонок с низкой кардинальностью (малым числом уникальных значений), например, пол или статус. Используют битовые карты для быстрого выполнения фильтрации и агрегации.

Подводные камни

Индексы ускоряют чтение, но замедляют операции записи (INSERT, UPDATE, DELETE), так как требуют обновления индекса. Также они занимают дополнительное дисковое пространство. Переиндексация и выбор неподходящего типа могут привести к деградации производительности.

Когда использовать

  • B-Tree — для большинства запросов с сортировкой и диапазонами.
  • Хеш-индексы — для точного совпадения по ключу.
  • Инвертированные и полнотекстовые — для текстового поиска.
  • Пространственные — для геоданных.
  • Bitmap — для колонок с малым числом уникальных значений.

Коротко

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