Mysql总结零经文选择非零

时间:2013-06-04 08:39:37

标签: mysql

如果我的表格列每行有0或1,则 以下哪一项是最佳选择:

SELECT SUM(myCol) as v FROM mytable
SELECT SUM(mycol) as v FROM mytable WHERE mycol=1
SELECT COUNT(mycol) as v FROM mytable WHERE mycol=1

更新: 在第5个人投票结束我的Q之前的一刻:

我还不知道基数,也不知道索引只是被问为理论问题 实际上我希望其中一个陈述总是比其他陈述更好 考虑例如第3和第2 - 我希望可能有人会说COUNT选项更好,因为(可能 - 这是推测不是事实)在执行WHERE时行已被计算无论如何... 或者比较有人可能会说的前两个选项(再次 - 我的猜测),只要mycol上没有索引,那么第一个总是会更好,因为它需要更少的比较 - 或者反过来第二个更好,因为它需要减少添加动作(可能比比较更昂贵)。

也许这个问题应该更多地说明“在什么条件下可以确定其中一个(或两个)其中一个的优越性”。

抱歉,如果我给某人留下的印象是我懒得做一个EXPLAIN ......

2 个答案:

答案 0 :(得分:0)

我会说,SELECT SUM(myCol) as v FROM mytable最好......

为什么?

对于SELECT SUM(mycol) as v FROM mytable WHERE mycol=1,它将执行如下。

 SELECT mycol as v FROM mytable
 FROM ABOVE SUM data
 FROM ABOVE CHECK WHERE mycol=1

对于SELECT COUNT(mycol) as v FROM mytable WHERE mycol=1与上述相同......

 SELECT mycol as v FROM mytable
 FROM ABOVE COUNT data
 FROM ABOVE CHECK WHERE mycol=1

然而,对于SELECT SUM(myCol) as v FROM mytable,它将是

 SELECT mycol as v FROM mytable
 FROM ABOVE SUM data

我希望这回答......


或者最好,只需在每次查询之前编写EXPLAIN并查看效果......

EXPLAIN SELECT SUM(myCol) as v FROM mytable
EXPLAIN SELECT SUM(mycol) as v FROM mytable WHERE mycol=1
EXPLAIN SELECT COUNT(mycol) as v FROM mytable WHERE mycol=1

答案 1 :(得分:0)

这取决于您的要求。 虽然如果你想把1个值的列数加起来,我宁愿

SELECT COUNT(mycol) as v FROM mytable WHERE mycol=1