Как вы можете создать фиксированное количество строк в MySQL v8 для тестирования производительности? - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь создать тесты производительности в 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,, что было бы достаточно, я полагаю.

Как мне генерировать 100k строк в MySQL v8?

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Вы можете использовать старомодный метод 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;

Было бы интересно проверить производительность cross join в сравнении с рекурсивным CTE.

0 голосов
/ 28 мая 2018

Чтобы ответить на мой собственный вопрос, согласно комментарию Strawberry:

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;.

...