Spec-Zone .ru
спецификации, руководства, описания, API

8.13.14.1. Свободный Индексируют Сканирование

Самый эффективный способ обработать GROUP BY то, когда индексирование используется, чтобы непосредственно получить группирующиеся столбцы. С этим методом доступа MySQL использует свойство некоторых, индексируют типы, что ключи упорядочиваются (например, BTREE). Это свойство включает использованию групп поиска в индексировании, не имея необходимость рассматривать все ключи в индексировании, которые удовлетворяют все WHERE условия. Этот метод доступа рассматривает только часть ключей в индексировании, таким образом, это вызывают, свободное индексирует сканирование. Когда есть нет WHERE пункт, свободное индексирует чтения сканирования так много ключей как число групп, которые могут быть намного меньшим числом чем тот из всех ключей. Если WHERE пункт содержит предикаты диапазона (см. обсуждение range присоединитесь вводят Раздел 8.8.1, "Оптимизируя Запросы с EXPLAIN"), свободное индексируют сканирование, ищет первый ключ каждой группы, которая удовлетворяет условия диапазона, и снова читает наименее возможное число ключей. Это возможно при следующих условиях:

Если освобождено индексируйте сканирование, применимо к запросу, EXPLAIN выходные шоу Using index for group-by в Extra столбец.

Предположите, что есть индексирование idx(c1,c2,c3) на таблице t1(c1,c2,c3,c4). Свободные индексируют метод доступа сканирования, может использоваться для следующих запросов:

SELECT c1, c2 FROM t1 GROUP BY c1, c2;SELECT DISTINCT c1, c2 FROM t1;SELECT c1, MIN(c2) FROM t1 GROUP BY c1;SELECT c1, c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;SELECT MAX(c3), MIN(c3), c1, c2 FROM t1 WHERE c2 > const GROUP BY c1, c2;SELECT c2 FROM t1 WHERE c1 < const GROUP BY c1, c2;SELECT c1, c2 FROM t1 WHERE c3 = const GROUP BY c1, c2;

Следующие запросы не могут быть выполнены с этим быстрым избранным методом по приведенным причинам:

Свободные индексируют метод доступа сканирования, может быть применен к другим формам ссылок агрегатной функции в списке выборки, в дополнение к MIN() и MAX() ссылки уже поддерживали:

Предположите, что есть индексирование idx(c1,c2,c3) на таблице t1(c1,c2,c3,c4). Свободные индексируют метод доступа сканирования, может использоваться для следующих запросов:

SELECT COUNT(DISTINCT c1), SUM(DISTINCT c1) FROM t1;SELECT COUNT(DISTINCT c1, c2), COUNT(DISTINCT c2, c1) FROM t1;

Свободный индексируют сканирование, не применимо для следующих запросов:

SELECT DISTINCT COUNT(DISTINCT c1) FROM t1;SELECT COUNT(DISTINCT c1) FROM t1 GROUP BY c1;