是COUNT(*)索引?

时间:2013-08-13 10:45:45

标签: sql sql-server database select

我只想知道好奇心,Select Count(*) from SomeTableName是否也会像Select * from SomeTableName一样遍历数据库的所有行?

或者,在每次添加或删除行时,数据库的元数据中是否还有其他可用的计数字段?并且该字段由前一个查询访问。

另外,我想知道哪两个查询更快,多少?

1 个答案:

答案 0 :(得分:17)

SELECT Count(*)
FROM   SomeTableName 

将始终计算所有行。虽然(与SELECT *不同),但它不必读取所有列,并且可以使用可用的最窄(非过滤)索引。

与MySQL(MyISAM引擎)不同,它不会从元数据中检索值。

行数计数值在元数据中可用,可以从sys.partitions检索,但这绝不会用于COUNT次查询,并不总是准确的。