【问题标题】:How to efficiently grow the size of the test data [closed]如何有效地增加测试数据的大小[关闭]
【发布时间】:2016-09-13 13:30:07
【问题描述】:

我有一个包含大约 100 次拍卖的数据库。我想创建一个工具,将我的数据库增长到可以说是 10000 或 100000 销售额的大小。我需要这个用于测试目的。我正在使用 java 和 SQL Server 2005。原始数据将来自数据库备份文件,该文件将被还原,然后被操纵以增加大小。增加数据大小的最有效方法是什么?

【问题讨论】:

  • 高效,是指最少的代码行数吗?还是输入大量数据的最快方法?
  • 您要求重复数据,请发布一些示例架构
  • 对我来说高效是输入大量数据的最快方法。

标签: java sql-server database


【解决方案1】:

这是一种快速且相当简单的方法:

我从您的表的 模型 开始,其中包含一些现有数据:

DECLARE @YourRealTable TABLE(ID INT IDENTITY,SomeValue VARCHAR(100));
INSERT INTO @YourRealTable VALUES
 ('One existing value 1'),('One existing value 2')
,('One existing value 3'),('One existing value 4');

--以下 CTE 将在微秒内创建多达 10^9 个运行数字...

--让我们插入 ~4000(4 个现有乘以 1000)

DECLARE @start INT=1;
DECLARE @end INT  =1000;

WITH x AS(SELECT 1 AS N FROM(VALUES(1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) AS tbl(N))--10^1
,N3 AS (SELECT 1 AS N FROM x CROSS JOIN x AS N2 CROSS JOIN x N3) --10^3
,Tally AS(SELECT TOP(@end-@start +1) ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) + @start -1 AS Nr FROM N3 
          CROSS JOIN N3 N6 CROSS JOIN N3 AS N9)
INSERT INTO @YourRealTable(SomeValue)
SELECT SomeValue
FROM @YourRealTable
CROSS APPLY Tally;

--现在对大约 4000 条相似记录感到满意:

SELECT * FROM @YourRealTable;

【讨论】:

    【解决方案2】:

    创建一些测试数据并制作一个 sql 脚本来插入这些数据。 然后,您必须处理密钥等以获得正确的 ID。 然后运行脚本,你就完成了。 如果您需要新数据或更多数据,请重复此操作。

    【讨论】:

      【解决方案3】:

      如果你没有任何标识列,你可以这样做:

      INSERT INTO Sales
      SELECT  
          S.*
      FROM    
          Sales S
          CROSS JOIN (SELECT 1 L UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) Factor
      

      【讨论】:

      • 我确实有身份列。我可以'ON DUPLICATE KEY UPDATE'吗?
      【解决方案4】:

      使用同时

      DECLARE @Id INT=1
      
      WHILE @Id<5
      BEGIN
          INSERT INTO Sales
          SELECT * FROM Sales
          SET @Id=@Id+1;      
      END
      

      【讨论】:

      • set 可以和insert 一起使用吗?
      • @talex 这些是 2 个单独的语句,而不是单个语句。
      猜你喜欢
      • 2021-09-05
      • 2018-08-03
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2011-12-07
      • 2013-08-29
      相关资源
      最近更新 更多