Индексы MySQL: наличие нескольких индексов или одного ключа для нескольких полей? - PullRequest
6 голосов
/ 29 июля 2010

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

Когда я использую phpMyAdmin для создания таблиц для себя и выбираю свойиндексы в форме создания таблицы, я вижу, что phpMyAdmin объединяет мои индексы в 1 (плюс мой основной).

Какая разница?Один лучше другого?В каком случае?

Спасибо!

Ответы [ 2 ]

13 голосов
/ 29 июля 2010

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

Причина в том, что индекс можно использовать, только если вы используете все поля в любом полномпрефикс индекса.Если у вас есть индекс (a, b, c, d, e, f), то это прекрасно работает для запроса, который фильтрует по a, или по запросу, который фильтрует как по a, так и по b, но это будетбесполезно для фильтрации запросов только на c.

Нет простого правила, которое всегда работает для выбора лучших индексов.Вам нужно посмотреть на типы запросов, которые вы делаете, и выбрать индексы, которые ускорили бы эти конкретные запросы.Если вы тщательно продумаете порядок столбцов, вы можете найти небольшое количество индексов, которые будут полезны для нескольких разных запросов.Например, если в одном запросе вы фильтруете как a, так и b, а в другом запросе вы фильтруете только b, то индекс для (b, a) будет использоваться обоими запросами, но индекс an (a,б) не будет.

8 голосов
/ 29 июля 2010

Это на самом деле зависит от ваших запросов. Некоторые запросы лучше используют многоколоночные индексы, некоторые нет. ОБЪЯСНИТЕ, твой друг.

http://dev.mysql.com/doc/refman/5.6/en/explain.html

Также очень хороший ресурс здесь:

http://dev.mysql.com/doc/refman/5.6/en/optimization-indexes.html

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