iT邦幫忙

8

MySQL產生測試資料的方法之二

  • 分享至 

  • xImage
  •  

之前有介紹過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(),產生亂數,
適當增加即可.

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
老鷹(eagle)
iT邦高手 1 級 ‧ 2014-03-19 13:56:09

沙發搶沙發

總裁 iT邦好手 1 級 ‧ 2014-03-19 17:22:49 檢舉

有自動產生D槽資料的方法嗎??...疑惑

沙發沙發沙發沙發沙發沙發沙發沙發沙發沙發
把老鷹的座位全部預約掉!

0
一級屠豬士
iT邦大師 1 級 ‧ 2014-03-19 18:40:57

報告總裁,D槽部份還需要泰大協助啊.

0
海綿寶寶
iT邦大神 1 級 ‧ 2014-03-19 22:14:22


各位D槽專家怎麼都不去幫幫人家的D槽問題呢
醉

此D非彼D.

總裁 iT邦好手 1 級 ‧ 2014-03-20 08:29:32 檢舉

好吧,以後放E槽好了.....毆飛

我要留言

立即登入留言