为什么选择count会占用很多行?

时间:2012-04-20 12:39:46

标签: sql indexing

表团队包含1169行,其中1133行具有UserId字段!= 0。 “UserId”字段中有一个索引

查询:

EXPLAIN SELECT count(*) FROM teams WHERE UserId != 0

返回具有要检查的行的估计值的输出等于1133。

为什么查询需要检查所有行?它不应该仅仅为此目的使用索引吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

它会检查几乎所有行,因为你想要几乎所有行(因为你说UserId!= 0)。当然,你然后做一个“计数”,所以你只显示一个记录,但他们都必须被提取,以便计算它们。 如果你去哪里

select count(1) from teams where UserId = 100

然后它将检查几行,因为你要求一个精确的值(UserId = XX而不是UserId!= yy)。