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

8.13.14. GROUP BY Оптимизация

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

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

Самые важные предварительные условия для того, чтобы использовать индексируют для GROUP BY это все GROUP BY ссылочные атрибуты столбцов от того же самого индексируют, и что индексировать хранилища его ключи в порядке (например, это - a BTREE индексируйте и не a HASH индексируйте). Может ли использование временных таблиц быть заменено, индексируют доступ, также зависит, на котором части индексирования используются в запросе, условия, определенные для этих частей, и выбранных агрегатных функций.

Есть два способа выполнить a GROUP BY запрос через индексирует доступ, как детализировано в следующих разделах. В первом методе группирующаяся работа применяется вместе со всеми предикатами диапазона (если любой). Второй метод сначала выполняет сканирование диапазона, и затем группирует получающиеся кортежи.

В MySQL, GROUP BY используется для того, чтобы сортировать, таким образом, сервер может также применяться ORDER BY оптимизация к группировке. См. Раздел 8.13.13,"ORDER BY Оптимизация".