之前有介紹過MySQL產生測試資料的方法,請參考:
http://ithelp.ithome.com.tw/question/10133871
係使用Stroed Procedure.搭配Memory Engine.
但是還要先準備Stroed Procedure,
操作上增加一些步驟.
故提出方法二,希望對大家使用MySQL有所幫助.
這次還是搭配Memory Engine,速度可以較快,
但是將不會一下產生100萬筆,所以不需要先調高heap.
MySQL一般使用者,均能下SHOW GLOBAL STATUS,
亦即對 information_schema.GLOBAL_STATUS 有查詢的權限.
此Table的資料筆數隨著版本不同有差異,不過數量已經夠我們
用來產生測試資料的初始之用.
首先建立一個Table,使用Memory Engine.
CREATE TABLE hitofiller(
id INT UNSIGNED NOT NULL PRIMARY KEY
)ENGINE=Memory;
產生100筆基本的資料
INSERT INTO hitofiller(id)
SELECT @num := @num + 1
FROM information_schema.GLOBAL_STATUS a
, (SELECT @num := 0) b
LIMIT 100;
Query OK, 100 rows affected (0.01 sec)
Records: 100 Duplicates: 0 Warnings: 0
直接利用hitofiller 增加自己的數量,到1萬筆.
INSERT INTO hitofiller(id)
SELECT @num := @num + 1
FROM hitofiller a
, (SELECT id
FROM hitofiller
LIMIT 99) b
, (SELECT @num := 100) c;
Query OK, 9900 rows affected (0.02 sec)
Records: 9900 Duplicates: 0 Warnings: 0
檢查 hitofiller 的數值.
SELECT COUNT(1)
, MAX(id)
, MIN(id)
FROM hitofiller;
+----------+---------+---------+
| COUNT(1) | MAX(id) | MIN(id) |
+----------+---------+---------+
| 10000 | 10000 | 1 |
+----------+---------+---------+
至此已經產生了1萬筆,遞增數列的資料.
應用範例:
例如要產生100萬筆的有日期型態的測試資料.
建立測試用的Table
CREATE TABLE hito_date(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
sdate DATE NOT NULL);
INSERT INTO hito_date(sdate)
SELECT DATE_ADD('2014-01-01', INTERVAL RAND(20140312) * 364 DAY)
FROM hitofiller a
JOIN (SELECT id
FROM hitofiller
LIMIT 100) b;
Query OK, 1000000 rows affected (7.91 sec)
Records: 1000000 Duplicates: 0 Warnings: 0
檢查資料
SELECT COUNT(1) AS cnt
, MIN(sdate)
, MAX(sdate)
FROM hito_date;
+---------+------------+------------+
| cnt | MIN(sdate) | MAX(sdate) |
+---------+------------+------------+
| 1000000 | 2014-01-01 | 2014-12-31 |
+---------+------------+------------+
大約8秒的時間,就產生了100萬筆有日期型態的測試資料.
若需要其他型態的欄位,如數值,可自行使用RAND(),產生亂數,
適當增加即可.