我只是出于好奇而想知道,是否Select Count(*) from SomeTableName也遍历数据库的所有行Select * from SomeTableName?
Select Count(*) from SomeTableName
Select * from SomeTableName
还是在数据库的元数据中有其他计数字段可用于在每次添加或删除行时进行更新?以前的查询将访问该字段。
我也想知道两个查询中哪个查询更快,多少查询?
SELECT Count(*) FROM SomeTableName
将始终计算所有行。尽管(不同于SELECT *),它不必读取所有列,并且可以使用可用的最窄(未过滤)索引。
SELECT *
与MySQL(MyISAM引擎)不同,它不会从元数据中检索值。
行计数值在元数据中可用,并且可以从中检索,sys.partitions但是它从未用于COUNT查询,而且并不总是准确的。
sys.partitions
COUNT