mysql“group by”字段命令

时间:2014-12-01 07:29:04

标签: mysql

我有一个关于使用" group by"的问题在mysql中:组顺序是否影响查询效率。

1.SELECT SQL_NO_CACHE `er_ct`, `appve`  FROM TBL_547 WHERE UAEWA_ts >= 1417276800 AND UAEWA_ts <= 1417449540 GROUP BY `appve`, `er_ct` ORDER BY `c79fd348-cc8e-41f2-ae93-0b2b2cde8a31`  DESC  limit  5;
2.SELECT SQL_NO_CACHE `er_ct`, `appve`  FROM TBL_547 WHERE UAEWA_ts >= 1417276800 AND UAEWA_ts <= 1417449540 GROUP BY  `er_ct`,`appve` ORDER BY `c79fd348-cc8e-41f2-ae93-0b2b2cde8a31`  DESC  limit  5;

两个句子之间的差异是&#34; GROUP BY appveer_ct&#34;和&#34; GROUP BY er_ctappve&#34;。在appve和er_ct上没有索引(组合索引)。 &#34; SELECT COUNT(DISTINCT er_ct)FROM TBL_547&#34;的值是#。&#34; SELECT COUNT(DISTINCT appve)FROM TBL_547&#34;是3。

这是截图。 http://i.stack.imgur.com/AeQy2.png

结构:http://i.stack.imgur.com/ewgAy.png

感谢。

1 个答案:

答案 0 :(得分:0)

使用group by在列上创建索引不会提升结果。执行查询时,首先将SQL语句编译为关系代数运算树。这些操作每个都将一个或多个表作为输入,并生成另一个表作为输出。然后使用输出表SQL引擎应用任何其他操作: - agregation - group by - 排序

因此,您可以通过以下方式提升查询: - 创建智能查询,例如仅在索引列上。 - 确保您的结果集不是很大,并且不能访问所有连接的列,例如Select *,这对生产来说是一种过度杀伤

我还建议SQL Tuning作为讲座。我希望我的回答会有所帮助。

首先想到我脑子里的流行音乐是两列中不同结果的大小,你提到3和7k,这是我假设的主要因素。 当查询优化器(它们一直在变化)时会看到第一个组列很小,它只会跟随流程,但如果他看到第一列很大(7k个不同的结果),他可以继续构建一个它的索引。大型列上的操作可能很慢,这就是为什么两个查询都有两个不同的时间。

相关问题