【问题标题】:How can you generate a fixed number of rows in MySQL v8 for performance testing?如何在 MySQL v8 中生成固定数量的行进行性能测试?
【发布时间】:2018-05-28 07:52:50
【问题描述】:

我正在尝试在 MySQL v8 中创建性能测试。为此,我需要生成固定数量的行,以便将它们插入到我的表中。

在 PostgreSQL 中,我会这样做:

insert into film(title)
select random_string(30)
from   generate_series(1, 100000);

这里,random_string(int) 是一个自定义函数。在 MySQL 中,我可以使用 https://stackoverflow.com/a/47884557/9740433 中提到的东西,我想这已经足够了。

如何在 MySQL v8 中生成 100k 行?

【问题讨论】:

  • 您可以创建一个过程,您可以在其中使用 while 迭代数据并将该数据插入到临时表中。之后,您可以访问该临时表以进行测试。
  • 您使用的是 8,所以很简单。手册甚至提供了一个这样的例子
  • 这是一个公用表表达式

标签: mysql sql mysql-8.0


【解决方案1】:

根据草莓的评论回答我自己的问题:

WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;

您可能想要更改递归深度:SET SESSION cte_max_recursion_depth = 1000000;

【讨论】:

    【解决方案2】:

    您可以使用老式的cross join 方法:

    with d as (
          select 0 as d union all select 1 union all select 2 union all select 3 union all
                 select 4 union all select 5 union all select 6 union all
                 select 7 union all select 8 union all select 9
         ),
         n as (
          select (1 + d1 + d2 * 10 + d3 * 100 + d4 * 1000 + d5 * 10000) as n
          from d d1 cross join
               d d2 cross join
               d d3 cross join
               d d4 cross join
               d d5
         )
    select *
    from n;
    

    用递归 CTE 测试 cross join 的性能会很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多