2015-01-24 4 views
2

У меня есть таблица, содержащая 250 миллионов записей, записывающих людей, которые живут в США и их окружении, округе и поселке. Упрощенная версия выглядит следующим образом:Использование индексов в нескольких столбцах

mysql

Я поставил комбинированный индекс по фамилии, региона, субрегиона и место. Следующие запросы выполняются в точности то же самое время:

SELECT SQL_NO_CACHE surname, place, count(*) as cnt FROM `ustest` group by place, surname; 

SELECT SQL_NO_CACHE surname, region, count(*) as cnt FROM `ustest` group by region, surname; 

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

Может ли кто-нибудь объяснить, как MySQL использует индексы в нескольких столбцах в таких случаях?

+1

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

ответ

1

Трудно сказать специфику планов выполнения ваших запросов, не видя вывода EXPLAIN.

Но две вещи выскочить:

  1. Оба запроса должны принимать все строки в таблице во внимание (вы не имеете пункт WHERE).
  2. Оба запроса могут быть удовлетворены путем сканирования вашего составного индекса на основе surname, являющегося ведущим столбцом этого индекса. Поскольку вы подсчитываете элементы, необходимо выполнить плотное, неравномерное сканирование индексов. (Вы можете прочитать о них.)

Возможно, что оба они имеют один и тот же план выполнения.

+0

Спасибо. Да. Объяснение объяснения для обоих одинаково. Я был под впечатлением, что индекс не должен использоваться. –

Смежные вопросы