在超过28万记录的情况下,在一毫秒内计算表中的行数。在SQL Server中,可以使用以下方法获取总行数。
- sys.dm_db_partition_stats tables
- sysindexes tables
- Count()
- Count() With No locks
最好的方法是在这个sysindexes以毫秒计数。
创建一个表。复制下面给出的脚本。
USE[TestDB]
GO
/****** Object: Table [dbo].[Table_1] Script Date: 11/23/2016 10:10:54 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATETABLE[dbo].[Table_1](
[ID][nvarchar](50) NULL, [RandomNo][nvarchar](50) NULL, [Create_Date][datetime] NULL) ON[PRIMARY]
GO
我插入了“2808924”行。
方法1(using Count())
询问
- SETSTATISTICSTIMEON
- SELECTCOUNT(ID) FROM TABLE_1
结果
SQL Server执行时间:
CPU time= 812 ms,elapsed time= 835 ms。
第二次
- SET STATISTICS TIME ON
- SELECT COUNT (ID) FROM TABLE_1
结果:
SQL Server分析和编译时间
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server执行时间
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server执行时间
CPU time = 328 ms, elapsed time = 326 ms.
方法-2(使用sysindexes)
- SETSTATISTICSTIMEON
- SELECTCONVERT(bigint, rows) FROM sysindexes WHERE id = OBJECT_ID(‘TABLE_1’) AND indid < 2
SQL Server分析和编译时间
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server执行时间:
CPU time = 0 ms, elapsed time = 0 ms.
(1排受影响)
SQL Server执行时间:
CPU time = 0 ms, elapsed time = 0 ms.
结论
使用count()时,只要SQL sysindex表占用的时间达到CPU time = 328 ms, elapsed time = 326 ms,则其执行时间为CPU time = 0 ms, elapsed time = 0