12

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

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

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

4

1 回答 1

17
SELECT Count(*)
FROM   SomeTableName 

将始终计算所有行。尽管(与 不同SELECT *)它不必读取所有列,并且可以使用可用的最窄(非过滤)索引来执行此操作。

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

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

于 2013-08-13T10:51:12.247 回答