我应该在客户端或SQL Server中生成大量SQL数据吗?

时间:2018-03-27 20:26:25

标签: sql sql-server random data-generation

我正在编写一个程序,用于在SQL Server中生成大量(大约20个表中大约10亿条记录)数据量和填充表。这是跨越多个表的数据,可能有多个外键约束,以及多个枚举'像表一样,其值的分布也需要看似随机,并且经常从其他表中引用。这导致了很多ORDER BY NEWID()类型的代码,这对我来说似乎很慢。

我的问题是:哪种策略会更高效:

  1. 使用基于集合的操作和一堆ORDER BY NEWID()在SQL Server中生成和插入数据以获得随机性

  2. 生成客户端上的所有数据(应该更快地从枚举表中选择随机值等操作),然后将数据导入SQL Server

  3. 我可以从这两种策略中看到一些积极因素和消极因素。显然,随机数据的生成将更容易,并且可能在客户端中更高效。但是将数据传输到服务器会很慢。否则,导入数据并将其插入基于集合的操作中的规模应该类似。

    有没有人做过类似的事情?

2 个答案:

答案 0 :(得分:3)

ORDER BY NEWID(),正如其他成员所言,可能是极其昂贵的操作。 还有其他更快的方法可以在SQL Server中获取随机数据:

SELECT * FROM StackOverflow.dbo.Users TABLESAMPLE (.01 PERCENT);

DECLARE @row bigint=(
SELECT RAND(CHECKSUM(NEWID()))*SUM([rows]) FROM sys.partitions
WHERE index_id IN (0, 1) AND [object_id]=OBJECT_ID(‘dbo.thetable’));

SELECT *
FROM dbo.thetable
ORDER BY (SELECT NULL)
OFFSET @row ROWS FETCH NEXT 1 ROWS ONLY;

致Brent Ozar和他最近的博客文章:https://www.brentozar.com/archive/2018/03/get-random-row-large-table/

我会选择在RDBMS端生成大量数据量。

答案 1 :(得分:0)

您不需要创建数十亿新品

创建一个包含百万随机的表并多次引用它。如果你随机重复每一百万行,我怀疑一切都会好的。

做一个随机的说明点和增量。使用%on increment循环。

如果您需要值0 - n再次使用%。