Нові матеріали на тему «Програмування»

Код, архітектура, інструменти розробника й уроки, які коштували безсонних ночей.

Написати
ПрограмуванняСкинути
Андрій КравецьBackend-розробник (PHP, MySQL)
Програмування 2 хвилини читання

Індекси в MySQL: чому запит повільний, хоча індекс є

«Але ж там є індекс!» — типова фраза перед тим, як розробник дивиться на повільний запит. Індекс не гарантує швидкості: MySQL сам вирішує, чи користуватися ним. Розберемо найчастіші причини, чому індекс не працює, і як це перевірити.

Починайте з EXPLAIN

Перед будь-якою оптимізацією запустіть запит із EXPLAIN. Дивіться на три колонки.

  • key — який індекс вибрано. NULL означає, що жодного.
  • rows — скільки рядків база збирається прочитати.
  • type — ALL означає повне сканування таблиці, ref чи range — уже непогано.
EXPLAIN SELECT * FROM orders WHERE user_id = 42 AND status = 'paid' ORDER BY created_at DESC LIMIT 20;

Причина 1: порядок колонок у складеному індексі

Індекс (status, user_id) не допоможе запиту, який фільтрує лише за user_id: працює правило «лівого префікса». Спершу ставте колонки, які порівнюються на рівність, потім ту, за якою сортуєте.

Причина 2: функція над колонкою

Умова WHERE

Читати далі

Про цю добірку

Матеріали на тему «Програмування» на Diox. Практичні тексти спеціалістів і компаній на цю тему. Код, архітектура, інструменти розробника й уроки, які коштували безсонних ночей.

Дивіться також: усе з теми «Програмування»; увесь розділ «Матеріали».

Теми цієї добірки

Теги цієї добірки