Sobes.tech
Назад к вопросам
Senior
12

Расскажи про индексы в БД: какие бывают, когда индекс игнорируется и база делает seq scan?

Компании, где спрашивали
Позитив Технолоджис

Ответ от нейросети

sobes.tech AI

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

  • B-tree — самый распространённый, подходит для точного поиска, диапазонов, сортировки.
  • Hash — быстрый для точного равенства, но не поддерживает диапазоны.
  • Bitmap — эффективен для столбцов с низкой кардинальностью (например, пол).
  • GIN/GiST — для полнотекстового поиска, работы с массивами и сложными типами.

Индекс может быть проигнорирован и выполнен последовательный скан (seq scan) в следующих случаях:

  • Если селективность запроса низкая (например, условие возвращает большую часть таблицы), то seq scan может быть быстрее.
  • Если статистика устарела или отсутствует, планировщик может выбрать seq scan.
  • При использовании функций или выражений, не покрываемых индексом.
  • Если индекс не покрывает все нужные столбцы и требуется дополнительное чтение из таблицы.
  • При блокировках или проблемах с индексом.

Пример: запрос WHERE age > 10 по индексу на age будет использовать индекс, если таких записей мало, иначе — seq scan.