Загружаем изображение…
Индексы в PostgreSQL/MySQL. Что мы забываем?
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для
проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю gender (M / F) почти бесполезен.
Базе проще прочитать всю таблицу (Full Scan), чем прыгать по индексу, который отсеет всего 50% записей.
2. Порядок в составном индексе: Правило «слева направо».
💜 Индекс (group_id, status) сработает для WHERE group_id = 5.
💜 Но НЕ сработает эффективно для WHERE status = active.
3. Функции убивают индекс:
💜 WHERE YEAR(created_at) = 2026 - индекс по created_at игнорируется.
💜 WHERE created_at >= '2026-01-01' - индекс работает.
4. LIKE с процентом в начале:
💜 LIKE '%text' - Full Scan. Индекс бесполезен.
💜 LIKE 'text%' - Range Scan. Индекс работает.
5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте EXPLAIN (или EXPLAIN ANALYZE) на сложных запросах перед выкаткой. Доверяй, но проверяй.
#database #sql #optimization #mysql #postgres
👉 @php_lib