iT邦幫忙

DAY 5
6

MySQL那些事兒系列 第 5

測試資料的產生

在發展系統的過程中,時常需要先產生測試資料,以利進行評估及調整.
用外部程式來產生是一個方法,利用MySQL的功能來產生也是一個方法.
利用MySQL Memory 引擎來建立基本的filler table.
首先調整佔用記憶體的大小,使其足夠容納.

SET SESSION max_heap_table_size = 1024 * 1024 * 200;

-- 建立一個使用 Memory 的 Table  

CREATE TABLE filler(  
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY  
) ENGINE=Memory;  

-- 建立一個 Stored Procedure  
DELIMITER $$  
  
CREATE PROCEDURE prc_filler(cnt INT)  
BEGIN  
        DECLARE _cnt INT;  
        SET _cnt = 1;  
        WHILE _cnt <= cnt DO  
                INSERT  
                INTO    filler  
                SELECT  _cnt;  
                SET _cnt = _cnt + 1;  
        END WHILE;  
END  
$$  
  
DELIMITER ;  

-- 建立一個一百萬筆的序列  
START TRANSACTION;  
CALL prc_filler(1000000);  

Query OK, 1 row affected (12.48 sec)

COMMIT;  

-- 產生一百萬筆的序列 只需12.48秒
接著我們可以再利用這個序列Table,再來產生其他測試資料.

CREATE TABLE ithelp1005 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
amount INT UNSIGNED NOT NULL,
price DECIMAL(20, 2) NOT NULL
);

INSERT INTO ithelp1005(amount, price)
SELECT CEILING(RAND(201310) * 1000) + 100,
       CEILING(RAND(201310) * 1000) + 30.00
  FROM filler;

Query OK, 1000000 rows affected (14.68 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

-- 只需14.68秒 就產生了一百萬筆的測試資料.

-- 挑10筆資料來看看

asami@[akina]>select * from ithelp1005 limit 10;
+----+--------+--------+
| id | amount | price  |
+----+--------+--------+
|  1 |    617 | 547.00 |
|  2 |    668 | 598.00 |
|  3 |    389 | 319.00 |
|  4 |    841 | 771.00 |
|  5 |    935 | 865.00 |
|  6 |   1053 | 983.00 |
|  7 |    358 | 288.00 |
|  8 |    531 | 461.00 |
|  9 |    480 | 410.00 |
| 10 |    709 | 639.00 |
+----+--------+--------+

善用MySQL的功能,可以提高系統開發的效率.


上一篇
SQL Query 執行的細節
下一篇
SQL Query 執行的細節的改進查詢方法
系列文
MySQL那些事兒30

1 則留言

我要留言

立即登入留言