【发布时间】:2014-08-23 08:05:32
【问题描述】:
我有这两个问题:
SELECT SQL_NO_CACHE DISTINCT(type) FROM actions LIMIT 0, 30;
和
SELECT SQL_NO_CACHE type FROM actions GROUP BY type LIMIT 0, 30;
如果我不使用 LIMIT 子句,执行时间是相等的。另一方面,在我的例子中,第一个查询需要将近 0.8 秒,而第二个需要 0.12 秒。
使用EXPLAIN,似乎唯一的区别是第一个查询使用了临时表,而第二个没有。
在这一点上,我对这两个查询的不同行为感到非常惊讶……您能对这个问题提供一些启示吗?
我目前使用的是 MYSQL 5.5.37-35.1 Percona Server (GPL),Release 35.1,Revision 666
【问题讨论】:
-
我假设第二个查询管理使用 GROUP BY 的类型索引。
-
coz
Distinct意味着额外的工作要做,忽略重复的条目,这就是为什么要花更多时间。 -
@Kickstart 两个查询都使用类型索引
-
@VedantTerkar 根据 mysql 文档 DISTINCT 应该是 GROUP BY 的特例。请记住,如果没有 LIMIT 子句,查询的执行方式相同
-
type是什么数据类型(和长度)?
标签: mysql group-by distinct explain