почему подзапрос с группой делает полное сканирование дважды? - PullRequest
0 голосов
/ 12 июня 2018

Я тестирую два типа запросов.Первый тип выглядит следующим образом:

explain select * from ord_order;  

explain select * from (select * from ord_order) as tbl;

Эти два плана выполнения показывают одинаковое поведение (полное сканирование один раз).

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

explain select * from ord_order 
        group by bundle_or_order_number;  

explain select * from 
        (select * from ord_order 
         group by bundle_or_order_number) as tbl;

второй запрос делает полное сканирование дважды!

Может кто-нибудь объяснить это?Спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Во-первых, это не имеет значения, потому что ваши запросы искажены.Не используйте select * с group by.Это просто не имеет смысла - и текущие версии MySQL не поддерживают его.Вопрос в следующем: из каких строк появляются столбцы?Вы должны использовать функции агрегирования.

Почему два запроса различны?В языковом языке MySQL различие заключается в том, материализуется ли производная таблица (подзапрос в предложении from).То, материализуются ли подзапросы, зависит от природы подзапроса и того, что MySQL решит сделать в используемой вами версии.

Об оптимизации производных таблиц можно прочитать в документации .

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