如何实现在1毫秒内计算大数据表中的行数

数据库技术
397
0
0
2022-04-27

如何实现在1毫秒内计算大数据表中的行数

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

询问

  1. SETSTATISTICSTIMEON
  2. SELECTCOUNT(ID) FROM TABLE_1

结果

SQL Server执行时间:

CPU time= 812 ms,elapsed time= 835 ms。

第二次

  1. SET STATISTICS TIME ON
  2. 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)

  1. SETSTATISTICSTIMEON
  2. 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

如何实现在1毫秒内计算大数据表中的行数