MySQL快速產生本地測試資料

來源:互聯網
上載者:User

標籤:執行   bst   插入   tab   空間   delete   efault   提示   set   

利用資料的預存程序產生測試資料:

我們可以通過資料庫的的 INSERT 語句直接在預存程序中向普通資料表中添加資料,但是

當我們添加到百萬資料後,往普通表插入測試資料的效能就會明顯降低。所以在這裡建議

使用記憶體表做一個中間鋪墊,在記憶體表中產生完百萬條資料後,在一次性的插入普通資料表

即可完成百萬條測試資料產生。下面我們看過程:

第一步建立記憶體表:

CREATE TABLE `vote_record_memory` (      `id` INT (11) NOT NULL AUTO_INCREMENT,      `user_id` VARCHAR (20) NOT NULL,      `vote_id` INT (11) NOT NULL,      `group_id` INT (11) NOT NULL,      `create_time` datetime NOT NULL,      PRIMARY KEY (`id`),      KEY `index_id` (`user_id`) USING HASH  ) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8  

 

第二步建立普通表:

CREATE TABLE `vote_record` (      `id` INT (11) NOT NULL AUTO_INCREMENT,      `user_id` VARCHAR (20) NOT NULL,      `vote_id` INT (11) NOT NULL,      `group_id` INT (11) NOT NULL,      `create_time` datetime NOT NULL,      PRIMARY KEY (`id`),      KEY `index_user_id` (`user_id`) USING HASH  ) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8

 

注意:記憶體表和普通表的區別在與他們的儲存引擎不同,在SQL代碼中已用紅色加粗標識。

 

在插入的過程中,為了讓資料更接近真實性,我們建立一個隨機參數的函數輔助資料的產生。

第三步建立隨機產生函數:

DELIMITER //
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255) CHARSET latin1BEGIN DECLARE chars_str varchar(100) DEFAULT ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘; DECLARE return_str varchar(255) DEFAULT ‘‘ ; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1)); SET i = i +1; END WHILE; RETURN return_str; END //

 

第四步建立預存程序:

DELIMITER //
CREATE PROCEDURE `add_vote_memory`(n int,len int)BEGIN DECLARE i INT DEFAULT 1; WHILE (i <= n ) DO INSERT into vote_record_memory(user_id,vote_id,group_id,create_time ) VALUEs (rand_string(len),FLOOR(RAND() * 1000),FLOOR(RAND() * 100) ,now() ); set i=i+1; END WHILE;END //

 

第五步執行預存程序:產生 100 萬條資料,user_id 長度 20 個字元

CALL add_vote_memory(1000000,20);

注意:在產生的過程共可能會出現記憶體不足或者溢出提示,需要設定 my.cnf 參數 max_heap_table_size

max_heap_table_size = 4096M

定義 max_heap_table_size 為 4G 的表示資料表在記憶體中的儲存大小,保證足夠的空間

儲存資料,因為記憶體表會把表結構存放在磁碟上,把資料放在記憶體中

 

第六步查看記憶體表的資料條數:

select count(*) from vote_record_memory;

注意:如果條數沒有達到你產生的條數,請在等一會或者重新整理一下資料統計條數最終達到你要產生的冊數條數,因為

資料量大會有一定的延時,以查最終出來的資料結果為準。(如果不在乎資料條數的多少可以忽略)

 

第七步將記憶體表的資料插入到普通表:

INSERT into vote_record SELECT * from  vote_record_memory;

 

第八步查看普通表的資料:

select count(*) from vote_record;

 

第九步刪除記憶體表的資料:

delete from vote_record_memory;

 

到此就完成了。

 

MySQL快速產生本地測試資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.