0

如果我有一个表列,每行有 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

更新:就在第五位好心人投票结束我的 Q 之前的一刻:

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

也许这个问题应该更多地按照“在什么条件下可以确定这些陈述之一优于其他两个(或两者)之一”的方式来说明。

对不起,如果我给人的印象是我懒得解释......

4

2 回答 2

0

这取决于您的要求。虽然如果您想将 1 值的列数相加,那么我会更喜欢

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

于 2013-06-04T08:49:08.680 回答
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
于 2013-06-04T08:46:46.093 回答