我只想知道好奇心,Select Count(*) from SomeTableName
是否也会像Select * from SomeTableName
一样遍历数据库的所有行?
或者,在每次添加或删除行时,数据库的元数据中是否还有其他可用的计数字段?并且该字段由前一个查询访问。
另外,我想知道哪两个查询更快,多少?
答案 0 :(得分:17)
SELECT Count(*)
FROM SomeTableName
将始终计算所有行。虽然(与SELECT *
不同),但它不必读取所有列,并且可以使用可用的最窄(非过滤)索引。
与MySQL(MyISAM引擎)不同,它不会从元数据中检索值。
行数计数值在元数据中可用,可以从sys.partitions
检索,但这绝不会用于COUNT
次查询,并不总是准确的。