MYSQL中SUM函数的索引

6

I have a query in MYSQL like this (simplified) :

SELECT col1, SUM(DISTINCT col2) AS S
FROM tbl1
WHERE col1='abbc'
GROUP BY col1
ORDER BY S ASC

我知道在col1上建立索引对于这种查询是有用的。我想知道在(col1,col2)上建立覆盖索引是否更有用,还是没有任何区别。


问题不够清晰。最好在理解的情境下提问。 - Rohit.007
我从未使用过 SUM(DISTINCT)。我想不出一个有效的情况。 - Gordon Linoff
相当棘手的问题。我认为“理论上”,即使没有DISTINCT col2,覆盖索引也必须有用。实践中需要进行实验。 - Alex Yu
@gordonlinoff:Bill在周一(1)、周二(2)、周三(4)和周四(8)很忙。Ben在周四、周五(16)和周六(32)很忙。将不同值的总和从127中减去,你会得到64(星期天)。 - Strawberry
1个回答

2

我尝试了一下,它似乎不同并且更有用。


索引版本执行计划:

没有去重

SELECT col1, SUM(col2) AS S
FROM tbl1
WHERE col1='abbc'
GROUP BY col1
ORDER BY S ASC;

distinct

SELECT col1, SUM(distinct col2) AS S
FROM tbl1
WHERE col1='abbc'
GROUP BY col1
ORDER BY S ASC;

SQL Fiddle


无索引版本执行计划:

没有区别

SQL Fiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接