Мне нужно загрузить таблицу с большим количеством тестовых данных. Это должно использоваться для тестирования производительности и масштабирования.
Как я могу легко создать 100 000 строк случайных/нежелательных данных для моей таблицы базы данных?
Мне нужно загрузить таблицу с большим количеством тестовых данных. Это должно использоваться для тестирования производительности и масштабирования.
Как я могу легко создать 100 000 строк случайных/нежелательных данных для моей таблицы базы данных?
Вы можете сделать это для вас в GenerateData. Просто укажите имена столбцов и типы данных и то, как вы хотите выводить данные (операторы SQL, HTML, Excel, XML, CSV).
Вы также можете использовать хранимую процедуру . В качестве примера рассмотрим следующую таблицу:
CREATE TABLE your_table (id int NOT NULL PRIMARY KEY AUTO_INCREMENT, val int);
Затем вы можете добавить хранимую процедуру следующим образом:
DELIMITER $$
CREATE PROCEDURE prepare_data()
BEGIN
DECLARE i INT DEFAULT 100;
WHILE i < 100000 DO
INSERT INTO your_table (val) VALUES (i);
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
Когда вы его назовете, у вас будет 100 тыс. записей:
CALL prepare_data();
Для многократного клонирования строк (дублирование данных) вы можете использовать
DELIMITER $$
CREATE PROCEDURE insert_test_data()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i < 100000 DO
INSERT INTO `table` (`user_id`, `page_id`, `name`, `description`, `created`)
SELECT `user_id`, `page_id`, `name`, `description`, `created`
FROM `table`
WHERE id = 1;
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL insert_test_data();
DROP PROCEDURE insert_test_data;
Если вы хотите больше контролировать данные, попробуйте что-то вроде этого (в PHP):
<?php
$conn = mysql_connect(...);
$num = 100000;
$sql = 'INSERT INTO `table` (`col1`, `col2`, ...) VALUES ';
for ($i = 0; $i < $num; $i++) {
mysql_query($sql . generate_test_values($i));
}
?>
где функция generate_test_values вернет строку, форматированную как "(" val1 "," val2 ",...)". Если это занимает много времени, вы можете их выгружать, чтобы вы не вызывали так много вызовов db, например:
for ($i = 0; $i < $num; $i += 10) {
$values = array();
for ($j = 0; $j < 10; $j++) {
$values[] = generate_test_data($i + $j);
}
mysql_query($sql . join(", ", $values));
}
будет запускать только 10000 запросов, каждый из которых добавит 10 строк.
Я нашел хорошие ответы от Михая Станку в следующем порядке:
Здесь это решение с чистой математикой и sql:
create table t1(x int primary key auto_increment);
insert into t1 () values (),(),();
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 1265 rows affected (0.01 sec)
Records: 1265 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 2530 rows affected (0.02 sec)
Records: 2530 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 5060 rows affected (0.03 sec)
Records: 5060 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 10120 rows affected (0.05 sec)
Records: 10120 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 20240 rows affected (0.12 sec)
Records: 20240 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 40480 rows affected (0.17 sec)
Records: 40480 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 80960 rows affected (0.31 sec)
Records: 80960 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 161920 rows affected (0.57 sec)
Records: 161920 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 323840 rows affected (1.13 sec)
Records: 323840 Duplicates: 0 Warnings: 0
mysql> insert into t1 (x) select x + (select count(*) from t1) from t1;
Query OK, 647680 rows affected (2.33 sec)
Records: 647680 Duplicates: 0 Warnings: 0
Попробуйте RandomProfile - они предлагают до 100 000 записей за один год, очень реалистичные пользовательские данные, экспорт в XML, CSV, обычный текст и json, которые легко импортируются в любую базу данных.