我正在测试两种类型的查询。 第一种类型如下所示:
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;
第二个查询执行两次完全扫描!
有人可以解释一下吗?谢谢。
首先,这无关紧要,因为您的查询格式不正确。 不要将select *
与group by
一起使用。 它只是没有意义 - 当前版本的MySQL不支持它。 问题是:列来自哪些行? 您应该使用聚合函数。
为什么这两个查询不同? 在MySQL术语中,区别在于派生表(from
子句中的子查询(是否具体化。 子查询是否具体化取决于子查询的性质以及MySQL决定在您正在使用的版本中执行的操作。
您可以在文档中阅读有关优化派生表的信息。