Mysql生成100w條測試資料
https://nsimple.top/archives/mysql-create-million-data.html
有時候我們需要對大資料進行測試,本地一般沒有那麼多資料,就需要我們自己生成一些。下面會藉助記憶體表的特點進行生成百萬條測試資料。
建立一個臨時記憶體表, 做資料插入的時候會比較快些
SQL
— 建立一個臨時記憶體表DROPTABLEIFEXISTS`vote_record_memory`;CREATETABLE`vote_record_memory`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`user_id`varchar(20)NOTNULLDEFAULT“,`vote_num`int(10)unsignedNOTNULLDEFAULT`0`,`group_id`int(10)unsignedNOTNULLDEFAULT`0`,`status`tinyint(2)unsignedNOTNULLDEFAULT`1`,`create_time`datetimeNOTNULLDEFAULT`0000-00-00 00:00:00`,PRIMARYKEY(`id`),KEY`index_user_id`(`user_id`)USINGHASH)ENGINE=InnoDBAUTO_INCREMENT=1DEFAULTCHARSET=utf8;
— 建立一個普通表,用作模擬大資料的測試用例
SQL
DROPTABLEIFEXISTS`vote_record`;CREATETABLE`vote_record`(`id`int(10)unsignedNOTNULLAUTO_INCREMENT,`user_id`varchar(20)NOTNULLDEFAULT“COMMENT`使用者Id`,`vote_num`int(10)unsignedNOTNULLDEFAULT`0`COMMENT`投票數`,`group_id`int(10)unsignedNOTNULLDEFAULT`0`COMMENT`使用者組id 0-未啟用使用者 1-普通使用者 2-vip使用者 3-管理員使用者`,`status`tinyint(2)unsignedNOTNULLDEFAULT`1`COMMENT`狀態 1-正常 2-已刪除`,`create_time`int(10)unsignedNOTNULLDEFAULT`0000-00-00 00:00:00`COMMENT`建立時間`,PRIMARYKEY(`id`),KEY`index_user_id`(`user_id`)USINGHASHCOMMENT`使用者ID雜湊索引`)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT=`投票記錄表`;
為了資料的隨機性和真實性,我們需要建立一個可生成長度為n的隨機字串的函式。
SQL
— 建立生成長度為n的隨機字串的函式DELIMITER// — 修改MySQL delimiter:`//`DROPFUNCTIONIFEXISTS`rand_string`//SETNAMES utf8//CREATEFUNCTION`rand_string`(nINT)RETURNSVARCHAR(255)CHARSET`utf8`BEGINDECLAREchar_strvarchar(100)DEFAULT`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789`;DECLAREreturn_strvarchar(255)DEFAULT“;DECLAREiINTDEFAULT0;WHILEi
為了操作方便,我們再建立一個插入資料的儲存過程
SQL
— 建立插入資料的儲存過程DROPPROCEDUREIFEXISTS`add_vote_record_memory`//CREATEPROCEDURE`add_vote_record_memory`(INnINT)BEGINDECLAREiINTDEFAULT1;DECLAREvote_numINTDEFAULT0;DECLAREgroup_idINTDEFAULT0;DECLAREstatusTINYINTDEFAULT1;WHILEi
開始執行儲存過程,等待生成資料(10W條生成大約需要40分鐘)
SQL
— 呼叫儲存過程 生成100W條資料CALLadd_vote_record_memory(1000000);
查詢記憶體表已生成記錄(為了下步測試,目前僅生成了105645條)
SQL
SELECTcount(*)FROM`vote_record_memory`;– count(*)– 105646
把資料從記憶體表插入到普通表中(10w條資料13s就插入完了)
SQL
INSERTINTOvote_recordSELECT*FROM`vote_record_memory`;
查詢普通表已的生成記錄
SQL
SELECTcount(*)FROM`vote_record`;– count(*)– 105646
如果一次性插入普通表太慢,可以分批插入,這就需要寫個儲存過程了:
SQL
— 引數n是每次要插入的條數– lastid是已匯入的最大idCREATEPROCEDURE`copy_data_from_tmp`(INnINT)BEGINDECLARElastidINTDEFAULT0;SELECTMAX(id)INTOlastidFROM`vote_record`;INSERTINTO`vote_record`SELECT*FROM`vote_record_memory`whereid>lastidLIMITn;END
呼叫儲存過程:
SQL
— 呼叫儲存過程 插入60w條CALLcopy_data_from_tmp(600000);
相關文章
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- mysql 動態生成測試資料MySql
- Sysbench測試神器:一條命令生成百萬級測試資料
- MySQL製作具有千萬條測試資料的測試庫MySql
- Mock生成測試資料Mock
- shell生成測試資料
- laravel seed生成測試資料Laravel
- 使用JDBC向MySQL資料庫批次插入10W條資料測試效率JDBCMySql資料庫
- 測試資料之自動生成
- 如何優雅地生成測試資料
- Python factory_boy 生成測試資料Python
- mysql中使用儲存過程生成1億條資料MySql儲存過程
- Go 單元測試之Mysql資料庫整合測試GoMySql資料庫
- Eolink Apikit 快速發起 API 測試,一鍵生成測試資料API
- 【Mysql】資料庫索引,百萬資料測試索引效果MySql資料庫索引
- MySQL - [06] 海賊王測試資料MySql
- 介面測試的時候如何生成隨機資料進行測試隨機
- 竟然拿ETL當測試資料生成工具使用
- mariadb快速插入100w資料
- navicat生成mysql資料字典MySql
- python 使用 random模組生成隨機測試資料Pythonrandom隨機
- 這是一條測試資訊。
- laravel實現100w大量資料插入資料庫Laravel資料庫
- mysql之 sysbench0.4.12資料庫效能測試MySql資料庫
- Elasticsearch 8.X 如何生成 TB 級的測試資料 ?Elasticsearch
- 用一條mysql語句插入多條資料MySql
- MySQL資料庫反向生成powerdesigner模型MySql資料庫模型
- 自動化測試資料生成:Asp.Net Core單元測試利器AutoFixture詳解ASP.NET
- 測試資料
- gpt生成測試GPT
- 開源神器:自動生成隨機 mock 資料測試物件隨機Mock物件
- 大資料測試與 傳統資料庫測試大資料資料庫
- 功能測試之存量資料新與增資料測試
- 測試資料不再難,人工智慧批次生成給你用!人工智慧
- mysql資料庫語句自動生成MySql資料庫
- TestComplete資料驅動測試教程(二)——記錄測試資料
- 墨者學院-SQL手工注入漏洞測試(MySQL資料庫)MySql資料庫
- [JM_08]JMeter連線Mysql資料庫測試實踐JMeterMySql資料庫