如果我的表格列每行有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 ......
答案 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