在超过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