我应该在客户端还是在 SQL 服务器中生成大量 SQL 数据?
Should I generate massive amounts of SQL data on the client or in SQL Server?
我正在编写一个程序来生成大量(约 10 亿条记录,分布在约 20 table 秒)的数据量并在 SQL 服务器中填充 table 秒。这是跨越多个 tables 的数据,可能有多个外键约束,以及多个 'enum' 像 tables,其值的分布也需要看似随机并且是经常从其他 table 中引用。这导致了很多 ORDER BY NEWID()
类型的代码,这对我来说似乎很慢。
我的问题是:哪种策略性能更好:
在SQL服务器中生成和插入数据,使用基于集合的操作和一堆ORDER BY NEWID()
来获得随机性
在客户端生成所有数据(应该使从枚举中选择随机值等操作更快 table),然后将数据导入 SQL 服务器
我可以从这两种策略中看到一些积极和消极的一面。显然,在客户端生成随机数据会更容易,而且性能可能更高。但是,将该数据发送到服务器会很慢。否则,导入数据并将其插入基于集合的操作在规模上应该相似。
有没有人做过类似的事情?
ORDER BY NEWID()
,正如其他成员所说,可能是极其昂贵的操作。
在 SQL 服务器中还有其他更快的获取随机数据的方法:
SELECT * FROM Whosebug.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 和他最近的博客 post:https://www.brentozar.com/archive/2018/03/get-random-row-large-table/
我会选择在RDBMS端生成海量数据..
你不需要创建数十亿个 newid
用一百万随机创建一个table并多次引用它。如果你随机重复每一百万行,我怀疑一切都会好起来的。
做一个随机的陈述点和增量。在增量上使用 % 来循环。
如果您需要值 0 - n 再次使用 %.
我正在编写一个程序来生成大量(约 10 亿条记录,分布在约 20 table 秒)的数据量并在 SQL 服务器中填充 table 秒。这是跨越多个 tables 的数据,可能有多个外键约束,以及多个 'enum' 像 tables,其值的分布也需要看似随机并且是经常从其他 table 中引用。这导致了很多 ORDER BY NEWID()
类型的代码,这对我来说似乎很慢。
我的问题是:哪种策略性能更好:
在SQL服务器中生成和插入数据,使用基于集合的操作和一堆
ORDER BY NEWID()
来获得随机性在客户端生成所有数据(应该使从枚举中选择随机值等操作更快 table),然后将数据导入 SQL 服务器
我可以从这两种策略中看到一些积极和消极的一面。显然,在客户端生成随机数据会更容易,而且性能可能更高。但是,将该数据发送到服务器会很慢。否则,导入数据并将其插入基于集合的操作在规模上应该相似。
有没有人做过类似的事情?
ORDER BY NEWID()
,正如其他成员所说,可能是极其昂贵的操作。
在 SQL 服务器中还有其他更快的获取随机数据的方法:
SELECT * FROM Whosebug.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 和他最近的博客 post:https://www.brentozar.com/archive/2018/03/get-random-row-large-table/
我会选择在RDBMS端生成海量数据..
你不需要创建数十亿个 newid
用一百万随机创建一个table并多次引用它。如果你随机重复每一百万行,我怀疑一切都会好起来的。
做一个随机的陈述点和增量。在增量上使用 % 来循环。
如果您需要值 0 - n 再次使用 %.