Mysql — создание образца данных из существующих строк

У меня есть таблица с около 50 тыс. строк. Мне нужно умножить эти данные в 10 раз, чтобы иметь как минимум 5 миллионов строк для тестирования производительности. Теперь мне потребовалось несколько долгих минут, чтобы импортировать 50 КБ из файла CSV, поэтому я не хочу создавать файл записи 5 МБ, а затем импортировать его в SQL.

Есть ли способ многократно дублировать существующие строки, чтобы создать 5 М записей? Я не возражаю, если строки идентичны, у них должен быть просто другой столбец id, который является основным (автоинкрементным) столбцом.

В настоящее время я делаю это на XAMPP с phpMyAdmin.


person VeeK    schedule 25.05.2017    source источник
comment
какая у вас платформа приложений? Используете ли вы какой-либо MVC, например laravel?   -  person Md. Abu Taleb    schedule 25.05.2017
comment
Мы еще не начали работу над сайтом. На самом деле, мы планируем протестировать производительность различных систем баз данных и php-фреймворков с этими данными.   -  person VeeK    schedule 25.05.2017
comment
stackoverflow.com/questions/11331573 /   -  person Md. Abu Taleb    schedule 25.05.2017


Ответы (3)


Insert into my_table (y,z) select y, z from my_table;  

где x — ваш автоматически увеличивающийся идентификатор.

ПОВТОРИТЕ (удивительно маленькое) количество раз

person Strawberry    schedule 25.05.2017
comment
около 6 повторений приблизит вас к 100-кратному увеличению объема данных. - person Hydrocat; 15.10.2019
comment
Да, так же актуально сегодня, как и 2,5 года назад. - person Strawberry; 15.10.2019

Вариант 1. Используйте объединение

 insert into your_table (col1,col2)
    select col1,col2  from your_table
    union all 
    select col1,col2 from your_table
    union all 
    select col1,col2 from your_table
    union all 
    select col1,col2 from your_table
    continued...

Вариант 2. Используйте фиктивную таблицу с 10 записями и выполните перекрестное соединение.

Создайте фиктивную таблицу с 10 строками

insert into your_table (col1,col2)
select col1,col2 from your_table, dummy_table
person Akhil    schedule 25.05.2017
comment
SELECT * не будет работать с первичными ключами, вы получите повторяющиеся ошибки ключа. - person Barmar; 25.05.2017
comment
Вам нужно выбрать все столбцы, кроме столбца id. - person Barmar; 25.05.2017
comment
Вы слишком много думаете об этом. - person Strawberry; 25.05.2017

Если у вас есть ~ 50 000 строк, то их копирование 99 раз даст вам примерно 5 млн строк. Для этого вы можете создать процедуру и использовать цикл для их копирования 99 раз.

DELIMITER $$
CREATE PROCEDURE populate()
BEGIN
  DECLARE counter INT DEFAULT 1;

  WHILE counter < 100 DO
    insert into mytable(colA, colB) select colA, colB from mytable;
    SET counter = counter + 1;
  END WHILE;
END $$

DELIMITER ;

Затем вы можете вызвать процедуру, используя

call populate();
person sid-m    schedule 25.05.2017
comment
Эй, я должен сказать, что это не 99 раз, а около 6! Видите ли, поскольку вы обрабатываете одну и ту же таблицу снова и снова, количество строк растет экспоненциально. - person Hydrocat; 15.10.2019