Я не згоден з деякими відповідями на це питання.
Чи існує таке поняття, як забагато індексів?
Звичайно. Не створюйте індекси, які не використовуються жодним із ваших запитів. Не створюйте зайві індекси. Використовуйте такі інструменти, як pt-duplicate-key-checker та pt-index-usage, щоб допомогти вам виявити непотрібні вам індекси.
Що індекси прискорять?
- Умови пошуку в пункті WHERE.
- Умови приєднання.
- Деякі випадки ЗАМОВЛЕННЯ.
- Деякі випадки GROUP BY.
- УНІКАЛЬНІ обмеження.
- ОБМЕЖЕННЯ ІНОЗЕМНИХ КЛЮЧІВ.
- ПОЛНОТЕКСТНИЙ пошук.
Інші відповіді свідчать, що INSERT / UPDATE / DELETE повільніші, чим більше у вас індексів. Це правда, але враховуйте, що багато застосувань UPDATE та DELETE також мають речення WHERE, а в MySQL UPDATE та DELETE також підтримують JOINs. Індекси можуть отримати користь від цих запитів більше, ніж компенсувати накладні витрати на оновлення індексів.
Крім того, InnoDB блокує рядки, на які впливає ОНОВЛЕННЯ або ВИДАЛЕННЯ. Вони називають це блокуванням на рівні рядка, але це насправді блокування на рівні індексу. Якщо немає індексу для звуження пошуку, InnoDB повинен заблокувати набагато більше рядків, ніж конкретний рядок, який ви змінюєте. Він навіть може зафіксувати всі рядки таблиці. Ці блокування блокують зміни, внесені іншими клієнтами, навіть якщо вони логічно не суперечать.
Коли добре додати індекс?
Якщо ви знаєте, вам потрібно виконати запит, який би скористався індексом в одному з наведених вище випадків.
Коли погано додавати індекс?
Якщо індекс є лівим префіксом іншого існуючого індексу, або індекс не допомагає жодному із запитів, які потрібно виконати.
Плюси та мінуси кількох індексів проти індексів із кількома стовпцями?
У деяких випадках MySQL може виконувати оптимізацію злиття індексів та об'єднувати або перетинати результати незалежних пошукових запитів. Але це дає кращу продуктивність для визначення одного індексу, тому об’єднання індексів не потрібно робити.
Для одного з моїх клієнтів-консультантів я визначив індекс із декількох стовпців у таблиці багато-до-багатьох, де індексу не було, та покращив їх запит на приєднання в 94 мільйони разів!
Створення правильних індексів - складний процес, заснований на запитах, які потрібно оптимізувати . Не слід висувати загальні правила, такі як "індексувати все" або "нічого не індексувати, щоб уникнути уповільнення оновлення".
Дивіться також мою презентацію Як справді розробляти індекси .