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