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
- Sql Server生成測試資料SQLServer
- 測試資料之自動生成
- java快速的生成測試資料Java
- 使用JDBC向MySQL資料庫批次插入10W條資料測試效率JDBCMySql資料庫
- MySQL構造測試資料MySql
- 【MySQL】資料庫效能測試MySql資料庫
- MySQL - [06] 海賊王測試資料MySql
- 如何優雅地生成測試資料
- 使用 Laravel 資料填充功能生成中文測試資料Laravel
- Mysql取隨機資料效率測試(400W條中讀取100條)MySql隨機
- Go 單元測試之Mysql資料庫整合測試GoMySql資料庫
- 介面測試的時候如何生成隨機資料進行測試隨機
- Eolink Apikit 快速發起 API 測試,一鍵生成測試資料API
- mysql中使用儲存過程生成1億條資料MySql儲存過程
- 竟然拿ETL當測試資料生成工具使用
- 【Mysql】資料庫索引,百萬資料測試索引效果MySql資料庫索引
- MySQL 快速創造百萬測試資料MySql
- mysql之 mysql資料庫壓力測試工具(mysqlslap)MySql資料庫
- MySQL索引條件下推的簡單測試MySql索引
- navicat生成mysql資料字典MySql
- Elasticsearch 8.X 如何生成 TB 級的測試資料 ?Elasticsearch
- mysql資料庫xtrabackup壓縮備份測試MySql資料庫
- mysql資料庫索引的建立以及效能測試MySql資料庫索引
- 自動化測試資料生成:Asp.Net Core單元測試利器AutoFixture詳解ASP.NET
- 大資料測試與 傳統資料庫測試大資料資料庫
- 開源神器:自動生成隨機 mock 資料測試物件隨機Mock物件
- 如何在Python中用scikit-learn生成測試資料集Python
- IMUSTOJ運維——批量自動化生成題目測試資料運維
- Percona MySQL 5.6 WHERE 條件中 OR 的索引測試MySql索引
- mysql之 sysbench0.4.12資料庫效能測試MySql資料庫
- laravel實現100w大量資料插入資料庫Laravel資料庫