是COUNT(*)索引?

Ais*_*iva 12 sql database sql-server select

我想知道只是为了好奇,Select Count(*) from SomeTableName它还遍历数据库的所有行Select * from SomeTableName

或者,数据库的元数据中是否有任何其他计数字段,每次添加或删除行时都会自动更新?并且该字段由前一个查询访问.

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

Mar*_*ith 17

SELECT Count(*)
FROM   SomeTableName 
Run Code Online (Sandbox Code Playgroud)

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

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

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