如果我有一个表格列,每列的行数均为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


更新:
在第五名善良人士即将投票结束我的问题前一刻:

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

也许应该按照“在什么条件下可以确保其中一项陈述优于其他两项(或两项)中的一项?

抱歉,如果我给人印象是我懒于做一个解释...

最佳答案

我会说,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

10-02 05:28