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