[MySQL]手っ取り早くテスト用データを作る – 文字列編

MySQL

負荷テスト等でDBに大量のテストデータが欲しい時が多々ある。
元になるimport用のDumpやCSVがあるなら良いが、今回は全くの0から作る場合を想定する。
今回は10万レコードのテストデータを作ることを考えてみる。

スポンサーリンク

データの元になるテーブルを作成

まずはテーブルを作成。

mysql> create table testdata(str varchar(10));
Query OK, 0 rows affected (0.22 sec)

今回は文字数にばらつきを持たせるデータを作ることを想定してみる。
空文字を含む10個のアルファベットをINSERTする。

mysql> insert into testdata values('A');
Query OK, 1 row affected (0.03 sec)

mysql> insert into testdata values('B');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('C');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('D');
Query OK, 1 row affected (0.01 sec)

mysql> insert into testdata values('E');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('F');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('G');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('H');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('I');
Query OK, 1 row affected (0.00 sec)

mysql> insert into testdata values('');
Query OK, 1 row affected (0.00 sec)

完成したテーブルは以下

mysql> select * from testdata;
+------+
| str  |
+------+
| A    |
| B    |
| C    |
| D    |
| E    |
| F    |
| G    |
| H    |
| I    |
|      |
+------+
10 rows in set (0.00 sec)
スポンサーリンク

自己結合を利用して10万通りの組み合わせを作る

空文字を含む10個の文字が入っているので、5つテーブルを結合することで10^5のレコードが作れる。

mysql> select concat(t1.str, t2.str, t3.str, t4.str, t5.str) from testdata t1, testdata t2, testdata t3, testdata t4, testdata t5;
+------------------------------------------------+
| concat(t1.str, t2.str, t3.str, t4.str, t5.str) |
+------------------------------------------------+
| AAAAA                                          |
| BAAAA                                          |
| CAAAA                                          |
| DAAAA                                          |
| AAAA                                           |
| ⋮                                              |
| F                                              |
| G                                              |
| H                                              |
| I                                              |
|                                                |
+------------------------------------------------+
100000 rows in set (0.10 sec)

このクエリをsubqueryとして利用しINSERTを行えば、サクッと文字列のカラムを構築できる。

コメント

タイトルとURLをコピーしました