Я не согласен с некоторыми ответами на этот вопрос.
Есть ли слишком много индексов?
Конечно. Не создавайте индексы, которые не используются ни в одном из ваших запросов. Не создавайте избыточных индексов. Используйте такие инструменты, как pt-duplicate-key-checker и pt-index-usage, чтобы найти индексы, которые вам не нужны.
Что ускорит работу индексов?
- Условия поиска в предложении WHERE.
- Условия присоединения.
- Некоторые случаи ORDER BY.
- Некоторые случаи GROUP BY.
- УНИКАЛЬНЫЕ ограничения.
- FOREIGN KEY ограничения.
- ПОЛНОТЕКСТОВЫЙ поиск.
В других ответах сообщалось, что INSERT / UPDATE / DELETE медленнее, чем больше у вас индексов. Это правда, но учтите, что во многих случаях использования UPDATE и DELETE также есть предложения WHERE, а в MySQL UPDATE и DELETE также поддерживают JOIN. Индексы могут принести пользу этим запросам больше, чем компенсировать накладные расходы на обновление индексов.
Кроме того, InnoDB блокирует строки, затронутые операциями UPDATE или DELETE. Они называют это блокировкой на уровне строк, но на самом деле это блокировка на уровне индекса. Если нет индекса для сужения поиска, InnoDB должен заблокировать намного больше строк, чем конкретная строка, которую вы изменяете. Он может даже заблокировать все строки в таблице. Эти блокировки блокируют изменения, сделанные другими клиентами, даже если они не конфликтуют логически.
Когда лучше добавить индекс?
Если вы знаете, что вам нужно выполнить запрос, который выиграет от индексации в одном из вышеуказанных случаев.
Когда добавлять индекс - плохая идея?
Если индекс является левым префиксом другого существующего индекса или индекс не помогает ни одному из запросов, которые необходимо выполнить.
Плюсы и минусы нескольких индексов по сравнению с индексами с несколькими столбцами?
В некоторых случаях MySQL может выполнять оптимизацию слияния индексов. и либо , либо пересекать результаты независимого поиска по индексам. Но это дает лучшую производительность для определения одного индекса, поэтому слияние индексов не требуется.
Для одного из моих клиентов-консультантов я определил многостолбцовый индекс для таблицы "многие ко многим", где индекса не было, и улучшил их запрос на соединение в 94 миллиона раз!
Создание правильных индексов - сложный процесс, основанный на запросах, которые необходимо оптимизировать. . Не следует устанавливать общие правила, такие как «индексировать все» или «ничего не индексировать, чтобы не замедлять обновления».
См. Также мою презентацию « Как правильно разрабатывать индексы» .