还是比tableA中的count(1)更快找到行数?

时间:2010-09-21 11:29:46

标签: sql sql-server sql-server-2005

有什么东西可以让我们更快地得到否定。表中的行而不是使用count(1)。还有两种情况:

a)当我们想得到的时候。表中的行数。

b)当我们只想知道是否至少有一行时。

提前致谢。

6 个答案:

答案 0 :(得分:2)

b)当我们只想知道是否至少有一行时。

SELECT TOP 1 myField FROM myTable [WHERE .....]

答案 1 :(得分:2)

A) 您可以从系统表中获取表行计数,例如,根据Uri Dimant的blog post here

b)中 我总是使用EXISTS:

IF EXISTS(SELECT * FROM YourTable)

答案 2 :(得分:2)

要知道表格中所有行的计数而不扫描它们,您可以使用

select SUM(row_count) AS row_count
from sys.dm_db_partition_stats
where object_id = object_id('dbo.tblName')
    and index_id < 2

我不确定这种方法是否有任何警告。 (可能它可能包括未提交记录的计数或不包括当前事务中所做的更改)

答案 3 :(得分:1)

b)Linq-to-Sql生成

EXISTS (SELECT NULL FROM Table....)

答案 4 :(得分:1)

a)否。

b)您可以使用exists函数,该函数仅检查是否存在结果并且实际上没有得到结果。

答案 5 :(得分:0)

有这种方法,使用sysobjects和sysindexes:

Counting rows for all tables at once

过去这对我很有用。