Sql server 使用T-SQL测试数据生成性能

Sql server 使用T-SQL测试数据生成性能,sql-server,performance,tsql,testing,random,Sql Server,Performance,Tsql,Testing,Random,我需要一个超过10000000行的大表来测试一些东西 我使用了这个查询 DECLARE @_i INT DECLARE @_MAX INT SET @_i = 0 SET @_MAX = 10000000 WHILE (@_i<@_MAX) BEGIN --WAITFOR DELAY '00:00:00.001' INSERT INTO [BigData].[dbo].[Log] ([Actime],[CustomerID],[ProductID], [Type]

我需要一个超过10000000行的大表来测试一些东西

我使用了这个查询

DECLARE @_i INT
DECLARE @_MAX INT
SET @_i = 0
SET @_MAX = 10000000
WHILE (@_i<@_MAX)
BEGIN
--WAITFOR DELAY '00:00:00.001'
INSERT INTO [BigData].[dbo].[Log]
([Actime],[CustomerID],[ProductID],
            [Type]
           ,[URL])

SELECT GETDATE() [Actime]
      ,Round(RAND()* 20000, 0)[CustomerID]
      ,Round(RAND()* 2000, 0) [ProductID]
      ,Round(RAND()* 100, 0)[Type]
      ,CONVERT(varchar(255), NEWID()) [URL]
Set @_i=@_i+1
 END  
DECLARE@\u i INT
声明@_maxint
设置@_i=0
设置@_MAX=10000000
当(@_i应用于您的问题时(将
@NumberOfRows
分配更改为您需要的行数):


使用循环快速为3163行种子设定。(实际上,任何包含SQRT(10000000)行的表都可以

然后使用交叉连接到自身

 INSERT INTO [BigData].[dbo].[Log]
 SELECT GETDATE() [Actime]
      ,Round(RAND()* 20000, 0)[CustomerID]
      ,Round(RAND()* 2000, 0) [ProductID]
      ,Round(RAND()* 100, 0)[Type]
      ,CONVERT(varchar(255), NEWID()) [URL]
      FROM [BigData].[dbo].[Log] a CROSS JOIN [BigData].[dbo].[Log] b

“产生”什么意思是?我想建议一种基于集合的方法,但它不会为
CustomerID、ProductId、Type
提供随机值。
WHILE
循环构造会导致循环每次迭代都有一个隐式事务。一个快速的选择是使用
BEGIN-TRAN
COMMMIT
。非常感谢您修复了我糟糕的英语ish:)嗨,DMason,你的意思是我必须在我的循环中添加BEGIN-TRAN和COMMIT吗?我尝试使用SQL,但总是得到一个例外,“System.OutOfMemoryException”您对
@NumberOfRows
变量使用了什么值?您的SSMS客户端可能是这里的瓶颈。我使用了5000,我的trid 1,仍然得到了例外。我猜这是内存缓存的原因,在我重新启动SSMS(不是SQL Server)后,它工作了!!非常感谢您
 INSERT INTO [BigData].[dbo].[Log]
 SELECT GETDATE() [Actime]
      ,Round(RAND()* 20000, 0)[CustomerID]
      ,Round(RAND()* 2000, 0) [ProductID]
      ,Round(RAND()* 100, 0)[Type]
      ,CONVERT(varchar(255), NEWID()) [URL]
      FROM [BigData].[dbo].[Log] a CROSS JOIN [BigData].[dbo].[Log] b