Назад к вопросам
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.