Повесил индекс, а база его игнорит Ты создал индекс на колонку… — SQL Academy: всё о реляционных БД и SQL — TG.ME

🙈 Повесил индекс, а база его игнорит

Ты создал индекс на колонку status, запускаешь поиск, а EXPLAIN нагло выдаёт Seq Scan. Кажется, база сломалась, но на самом деле она спасает твоё время.

⚙️ Почему это происходит
Индекс работает как алфавитный указатель в конце книги. Он идеален, если тебе нужно найти 5 строк из миллиона. База быстро находит ссылки и точечно забирает данные.

📉 Когда Full Scan быстрее
Если ты ищешь активных пользователей (например, is_active = true), а их в таблице 85%, индекс становится врагом оптимизатора.
🔹 Читать таблицу подряд (Full Scan) — это очень быстро. Как читать книгу страницу за страницей.
🔹 Использовать индекс для 85% строк — это сотни тысяч хаотичных прыжков туда-сюда за каждой отдельной строкой (Random I/O). Это слишком медленно, базе гораздо дешевле прочитать всё подряд и отфильтровать лишнее.

🚀 Что делать
🔸 Не строй индексы на колонки, где всего пара вариантов значений (статусы, пол, флаги).
🔸 Если часто ищешь редкие статусы (например, ошибки), используй частичный индекс:
CREATE INDEX idx_errors ON users(status) WHERE status = 'error';


💡 Индекс нужен для точечного поиска редких данных, а не для перекапывания всей таблицы.
👍10❤3🔥2🗿2
August 24, 2026 2.2K 1 5