Индексы, почему бы просто не индексировать все и когда использовать индексы? - PullRequest
7 голосов
/ 15 июня 2011

Индексы используются для быстрого поиска строк с конкретными значениями столбцов. Без индекса MySQL должен начинаться с первой строки, а затем читать всю таблицу, чтобы найти соответствующие строки.

Говорит наш любимый Руководство MySQL .

В таком случае, почему бы не индексировать каждый столбец?

И так как у меня такое ощущение, что это будет большим ударом по производительности, когда мы должны использовать индексы / лучшие практики для индексов ?

Заранее спасибо!

Ответы [ 3 ]

13 голосов
/ 15 июня 2011

Создание индекса всегда обходится дорого: чем больше у вас индексов в таблице, тем дороже модификация этой таблицы (то есть вставка, обновление и удаление занимают больше времени).

В свою очередь запросы, которые могут использовать индексы , будут выполняться быстрее. Это классический компромисс. В большинстве таблиц небольшое количество обычно используемых индексов стоит затрат, потому что запросы происходят достаточно часто (или их производительность гораздо важнее производительности модификации).

С другой стороны, если у вас есть какая-то таблица журналов, которая обновляется очень часто, но запрашивается очень редко (например, в случае катастрофического сбоя), то добавление индекса приведет к большим затратам и обеспечит небольшое преимущество.

Кроме того: полезность индекса зависит от того, какой именно запрос будет выполнен. Возможно, у вас есть индексы, охватывающие каждый столбец, но запрос не может использовать его, потому что индексы находятся в неправильном порядке, имеют неверную информацию или неправильный формат. Так что не все индексы помогают всем запросам.

1 голос
/ 15 июня 2011

Обычно индекс полезен, если он обладает хорошей избирательностью, то есть когда запрос выбирает небольшую часть данных на основе значения (или диапазона) индексированного атрибута.

Также индексы хороши для объединений слиянием,когда сортировка строк по атрибуту объединения в обеих объединенных таблицах позволяет сопоставлять строки и извлекать данные за один проход.

Как уже упоминалось, индексы замедляют обновления и занимают некоторую память (что само по себе замедляетпроизводительность ниже)

1 голос
/ 15 июня 2011

По вашей логике, вы будете индексировать не только каждый столбец, но каждую перестановку каждого столбца .Издержки, связанные с хранением этой информации и ее актуализацией, были бы чрезвычайно обширными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...