
🙈 Повесил индекс, а база его игнорит Ты создал индекс на колонку 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'; 💡 Индекс нужен для точечного поиска редких данных, а не для перекапывания всей таблицы.