【发布时间】:2011-02-23 09:17:23
【问题描述】:
用虚拟数据填充 SQL 表的最快方法是什么?
我有一个包含大约 40 个不同类型字段(int、bit、varchar 等)的宽表,需要进行一些性能测试。我正在使用 SQL Server 2008。
【问题讨论】:
标签: sql sql-server dummy-data
用虚拟数据填充 SQL 表的最快方法是什么?
我有一个包含大约 40 个不同类型字段(int、bit、varchar 等)的宽表,需要进行一些性能测试。我正在使用 SQL Server 2008。
【问题讨论】:
标签: sql sql-server dummy-data
推荐免费的、GNU 许可的随机自定义数据生成器http://www.generatedata.com/
【讨论】:
【讨论】:
你只需要在 INSERT 之后Go 1000 填充它 1000 次,就像这样:
INSERT INTO dbo.Cusomers(Id, FirstName, LastName) VALUES(1, 'Mohamed', 'Mousavi')
GO 1000
它将创建一个包含 1000 行相同的表。
另一种解决方案是,您可以用一些数据填充表格的开始行,然后通过一遍又一遍地重复开始行来填充表格的下一行,这意味着您自己填充表格:
INSERT INTO dbo.Customers
SELECT * FROM dbo.Customers
GO 10
如果一个或多个列是标识(意味着它们接受唯一值,如果它是自动增量的),您只是不要将它放在查询中,例如,如果 dbo.Customer 中的 Id 是标识,则查询会继续像这样:
INSERT INTO dbo.Customers
SELECT FirstName, Last Name FROM dbo.Customers
GO 10
代替:
INSERT INTO dbo.Customers
SELECT Id, FirstName, Last Name FROM dbo.Customers
GO 10
否则你会遇到这个错误:
An explicit value for the identity column in table 'dbo.Customers' can only be specified when a column list is used and IDENTITY_INSERT is ON.
注意:
这是一个算术级数,所以会持续一点,不要在GO前面使用大数字。
如果你想要一个更详细的表格,那么这次你可以通过执行一个简单的查询并按照以下步骤以同样的方式实现:
选择一个具有大量行的表,例如 dbo.Customers
右键单击它并选择Script Table as > Create To > New Query Editor Window
将您的新表命名为 dbo.CustomersTest 之类的其他名称,现在您可以执行查询以获得与 dbo.Customers 具有相似结构的新表。
注意:请记住,如果它有一个身份字段,请将其更改为Identity Specification to No,因为您应该用原始数据重复填充新表。
INSERT INTO [dbo].[CustomersTest] SELECT * FROM [dbo].[Customers] GO 1000
正如@SQLMenace 所提到的,RedGate 数据生成器是实现它的好工具,它的价格为 369 美元,但您有 14 天的试用机会。
优点是 RedGate 可以识别外键,因此您可以在查询中应用 JOIN。
您有很多选项可让您决定如何填充每一列,每一列都在语义上被预期,以便建议相关数据,例如,如果您有一个名为“部门”的列,则不是由奇怪的字符填充,它由诸如“技术”、“网络”、“客户”等表达式填充。甚至您可以使用正则表达式来限制选定的字符。
我在表格中填充了超过 10,000,000 条记录,这是一个很棒的模拟。
【讨论】:
答案较晚,但对本主题的其他读者可能有用。 除了其他解决方案,我还可以推荐使用 SSMS 或自定义 SQL 导入脚本、程序从 .csv 文件导入数据。有一个关于如何做到这一点的分步教程,所以你可能想看看:http://solutioncenter.apexsql.com/how-to-generate-randomized-test-data-from-a-csv-file/
请注意,使用 SSMS 或自定义 SQL 导入脚本导入 .csv 文件比手动创建 SQL 插入更容易,但有一些限制,如教程中所述:
如果需要填充数千行,而 .csv 文件包含数百行数据,这还不够。解决方法是一遍又一遍地重新导入相同的 .csv 文件,直到需要为止。这种方法的缺点是它会插入具有相同数据的大块行,而不是随机化它们。
本教程还解释了如何使用名为 ApexSQL Generate 的第 3 方 SQL 数据生成器。该工具具有从导入的 .csv 格式文件生成大量随机数据的集成功能。该应用程序具有功能齐全的免费试用版,因此您可以下载并试用它是否适合您。
【讨论】:
http://filldb.info/dummy/ 效果最好。它提供完整的设置、选择生成多少行、“真实”的虚拟数据,所有这些都是免费的。
我从未见过在这种情况下更有效或更好的方法。
您可以使用易于使用的 GUI 生成整个数据库或仅生成一个表。它的设置和选项也非常精细,让您可以毫不费力地生成虚拟数据。 GUI 没有大小限制,而且数据类型选项非常丰富。
要使用它,请导航到链接并插入定义表的 SQL 命令或使用它们的虚拟表。然后单击下一步并填写虚拟数据填充的行数据类型和设置。 然后单击下一步并生成数据。等待。完成后,下载数据库并将其导入您自己的数据库服务器。
【讨论】: