Sql server 使用T-SQL测试数据生成性能
我需要一个超过10000000行的大表来测试一些东西 我使用了这个查询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]
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