Індекси — це не магія, це інженерія
Більшість розробників знають, що індекси прискорюють запити. Але далеко не всі розуміють, як саме вони працюють, коли не працюють, і як їх правильно створювати.
Як працює B-Tree індекс
MySQL за замовчуванням використовує B+Tree індекси у InnoDB. Для таблиці з 10 мільйонами рядків B-Tree пошук потребує приблизно 23 порівняння, тоді як повне сканування — 10 мільйонів.
Найпоширеніша помилка: індекс на все
Кожен індекс збільшує час INSERT/UPDATE/DELETE, бо MySQL повинен оновлювати всі індекси при зміні даних. Правильний підхід — індексуйте тільки ті стовпці, які регулярно використовуються у WHERE, JOIN, ORDER BY та GROUP BY.
Складені індекси та порядок стовпців
Складений індекс на (last_name, first_name, age) працює для запитів за last_name, за last_name + first_name, та за всіма трьома. Але він НЕ працює для запитів тільки за first_name. Це правило найлівішого префікса.
Покриті індекси (Covering Indexes)
Якщо всі стовпці, потрібні запиту, містяться в індексі, MySQL не звертається до самої таблиці — він бере все з індекса. Покриті індекси особливо ефективні для COUNT-запитів та агрегацій.
Повнотекстовий пошук vs LIKE
Оператор LIKE не використовує індекси — це завжди повне сканування. Для пошуку тексту використовуйте FULLTEXT індекси.
EXPLAIN — ваш найкращий друг
Завжди перевіряйте запити через EXPLAIN перед тим, як вважати їх оптимізованими.
Висновок
Індексування — це баланс між швидкістю читання та запису. Аналізуйте через EXPLAIN, розумійте B+Tree, дотримуйтесь правила найлівішого префікса — і ваші запити будуть літати.