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