MySQL: разница между `... ADD INDEX (a);... ДОБАВИТЬ ИНДЕКС (b); `и` ... ДОБАВИТЬ ИНДЕКС (a, b); `? - PullRequest
2 голосов
/ 18 февраля 2010

Может кто-нибудь сказать мне, в чем разница между этими двумя:

ALTER TABLE x1 ADD INDEX(a);
ALTER TABLE x1 ADD INDEX(b);

И

ALTER TABLE x1 ADD INDEX(a,b);

Я знаю, что это сводится к самым основам, но иногда я нахожу первое кажетсябыть немного быстрее, чем последний.Это только мое чувство или есть какая-то реальная причина для этого?

Ответы [ 3 ]

4 голосов
/ 18 февраля 2010

Комбинированный INDEX представляет собой комбинацию клавиш «a» и «b».Это значительно улучшает доступ, если «a» или «a» И «b» являются частью поискового выражения.

Этот индекс бесполезен, если в ваших операторах SQL указан только «b».

Поэтому может быть полезно предоставить два разных индекса - но они должны использовать разные имена.

В зависимости от шаблонов доступа я бы порекомендовал индекс для "a" и "b" и дополнительный индекс для«b», если это соответствует вашим потребностям.

Имейте в виду, что любой дополнительный индекс замедляет работу базы данных по всем операциям, которые изменяют данные.Иногда лучше не показывать некоторые показатели.Обычно это хороший совет НЕ ИСПОЛЬЗОВАТЬ индексы в любом столбце таблицы.

Еще один совет: чтобы решить, следует ли использовать INDEX (a, b) или INDEX (b, a),Посмотрите на распределение ваших данных.Поместите значения с более высоким разбросом различных значений в первый столбец индекса, чтобы увеличить селективность этого индекса.Это значение обычно основано на качестве первого элемента индекса.

Например, индекс для столбцов NAME и SEX должен быть создан как INDEX (NAME, SEX), потому что есть еще много имен, которые различаются по полу?).

3 голосов
/ 18 февраля 2010

INDEX(a,b) ускорит поиск для a или a и b, но не только b, тогда как первый (INDEX(a) ... INDEX(b)) будет работать во всех случаях.

2 голосов
/ 18 февраля 2010

При втором варианте следующий запрос не будет использовать индекс:

SELECT * FROM x1 WHERE b = 'something';

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

Источник: Википедия - Индекс базы данных: порядок столбцов

...