自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解MySQL如何按表創(chuàng)建千萬級的壓測數(shù)據(jù)

數(shù)據(jù)庫 MySQL
有時(shí)我們要對系統(tǒng)做壓測,或者數(shù)據(jù)庫壓力測試,這時(shí)候需要對某些表插入幾百萬或者上千萬數(shù)據(jù),下面介紹下怎么利用MySQL循環(huán)和存儲過程對特定表的創(chuàng)建千萬行數(shù)據(jù)。

有時(shí)我們要對系統(tǒng)做壓測,或者數(shù)據(jù)庫壓力測試,這時(shí)候需要對某些表插入幾百萬或者上千萬數(shù)據(jù),下面介紹下怎么利用MySQL循環(huán)和存儲過程對特定表的創(chuàng)建千萬行數(shù)據(jù)。

1. 準(zhǔn)備測試表

  1. CREATE TABLE `username` ( 
  2.     `uid` INT( 11 ) UNSIGNED NOT NULL default 1235678901, 
  3.     `username` VARCHAR( 20 ) , 
  4.     `email` VARCHAR( 30 ) , 
  5.     `password` VARCHAR( 32 ) , 
  6.     `birthday` date, 
  7.     `gender` VARCHAR(10) , 
  8.     avatar MEDIUMBLOB, 
  9.     PRIMARY KEY ( `uid` ) 
  10. ENGINE = INNODB DEFAULT CHARSET=utf8

2. 隨機(jī)生成數(shù)據(jù)

MySQL里面自帶一個(gè)隨機(jī)數(shù)生成的函數(shù)RAND(),它能生成0-1的浮點(diǎn)數(shù)

RAND函數(shù)生成隨機(jī)數(shù):

詳解MySQL如何按表創(chuàng)建<span><span><span><i style=千萬級的壓測數(shù)據(jù)" src="http://p3.pstatp.com/large/pgc-image/18a9e01795184b6b9230e47f707ee6a9" width="348" height="148">

3. 隨機(jī)生成給定數(shù)目的字符串

這里用mysql循環(huán),循環(huán)采用WHILE循環(huán),循環(huán)里面采用字符串拼接函數(shù)CONCAT

  1. SET GLOBAL log_bin_trust_function_creators = 1;  
  2. CREATE DEFINER = `root` @`%` FUNCTION `rand_string` ( n INT ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGIN 
  3.     DECLARE 
  4.         chars_str VARCHAR ( 100 ) DEFAULT 'hwbtestABCDEFG23141HIJ6712dfghjkqwevbnqmwerqwerqwreqw214123e1214c12dssaf89'; 
  5.     DECLARE 
  6.         return_str VARCHAR ( 255 ) DEFAULT ''; 
  7.     DECLARE 
  8.         i INT DEFAULT 0; 
  9.     WHILE 
  10.             i < n DO 
  11.              
  12.             SET return_str = concat( return_str, substring( chars_str, FLOOR( 1 + RAND( ) * 80 ), 1 ) ); 
  13.          
  14.         SET ii = i + 1; 
  15.          
  16.     END WHILE; 
  17. RETURN return_str; 
  18. END; 

詳解MySQL如何按表創(chuàng)建<span><span><span><i style=千萬級的壓測數(shù)據(jù)" src="http://p9.pstatp.com/large/pgc-image/d8d78674aade489ebe63e79b6e807417" width="640" height="349">

用戶名和密碼都可以通過以上的方式添加。

郵箱的添加方式:可直接在insert的value對應(yīng)字段寫上concat(rand_string(5), '@qq.com')

4. 隨機(jī)生成DATE和DATETIME類型

(1) DATE類型

  1. CREATE DEFINER = `root` @`%` FUNCTION `randDate` ( ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGIN 
  2.     DECLARE 
  3.         aDate CHAR ( 10 ) DEFAULT ''; 
  4. /*CONCAT (1949 + FLOOR( ( RAND( ) * 70 ) ) 表示 1949到2019的隨機(jī)數(shù)據(jù)  
  5.     --L PAD ( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ) 表示月份的生成,小于 10自動補(bǔ)0  
  6.     --L PAD ( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 ) ) 表示 3號到10號的隨機(jī)數(shù)據(jù) */ 
  7.      
  8.     SET aDate = CONCAT
  9.         1949 + FLOOR( ( RAND( ) * 70 ) ), 
  10.         '-', 
  11.         LPAD( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ), 
  12.         '-', 
  13.         LPAD( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 )  
  14.     ); 
  15. RETURN aDate; 
  16. END; 

詳解MySQL如何按表創(chuàng)建<span><span><span><i style=千萬級的壓測數(shù)據(jù)" src="http://p1.pstatp.com/large/pgc-image/80b27cacdcd84a749f35acaecc805e8d" width="640" height="409">

關(guān)于LPAD函數(shù),具體做為月份和日期的補(bǔ)零作用!生效如下介紹:

  1. Returns the string str:str, left-padded with the string padstr to a length of len characters.  
  2. If str is longer than len:N, the return value is shortened to len characters. 
  3. mysql> SELECT LPAD('hi',4,'??'); 
  4. -> '??hi' 
  5. mysql> SELECT LPAD('hi',1,'??'); 
  6. -> 'h' 

(2) DATETIME類型

在剛剛寫好的randDate上進(jìn)行改造:

  1. CREATE DEFINER = `root` @`%` FUNCTION `randDateTime` ( ) RETURNS VARCHAR ( 255 ) CHARSET utf8 BEGIN 
  2.     DECLARE 
  3.         aDateTime CHAR ( 19 ) DEFAULT ''; 
  4.      
  5.     SET aDateTime = CONCAT
  6.         CONCAT( 
  7.             1949 + FLOOR( ( RAND( ) * 70 ) ), 
  8.             '-', 
  9.             LPAD( FLOOR( 1 + ( RAND( ) * 12 ) ), 2, 0 ), 
  10.             '-', 
  11.             LPAD( FLOOR( 3 + ( RAND( ) * 8 ) ), 2, 0 )  
  12.         ), 
  13.         ' ', 
  14.         CONCAT( 
  15.             LPAD( FLOOR( 0 + ( RAND( ) * 23 ) ), 2, 0 ), 
  16.             ':', 
  17.             LPAD( FLOOR( 0 + ( RAND( ) * 60 ) ), 2, 0 ), 
  18.             ':', 
  19.             LPAD( FLOOR( 0 + ( RAND( ) * 60 ) ), 2, 0 )  
  20.         )  
  21.     ); 
  22. RETURN aDateTime; 
  23. END; 

5. 將數(shù)據(jù)循環(huán)插入

定義將數(shù)據(jù)循環(huán)的存儲過程:

  1. DELIMITER // 
  2. CREATE PROCEDURE insertUser ( )  
  3. BEGIN 
  4.     DECLARE 
  5.         num INT; 
  6.      
  7.     SET num = 1
  8.     WHILE 
  9.             num < 100000 DO 
  10.             INSERT INTO username ( uid,username, email, PASSWORD, birthday, gender, avatar ) 
  11.         VALUES 
  12.             ( num, 
  13.                 rand_string ( 15 ), 
  14.                 concat( rand_string ( 5 ), '@qq.com' ), 
  15.                 rand_string ( 32 ), 
  16.                 randDate ( ), 
  17.                 '男', 
  18.             NULL  
  19.             ); 
  20.          
  21.         SET numnum = num + 1; 
  22.          
  23.     END WHILE; 
  24.     commit; 
  25. END; 
  26. // 

調(diào)用存儲過程:

  1. CALL insertUser; 
責(zé)任編輯:趙寧寧 來源: 今日頭條
相關(guān)推薦

2018-07-30 14:40:01

MySQLSQL查詢

2025-03-31 01:55:00

2019-12-13 11:51:34

技術(shù)AI云計(jì)算

2010-09-10 13:37:30

表分區(qū)SQL Server

2019-08-19 00:14:12

網(wǎng)絡(luò)測試帶寬網(wǎng)絡(luò)流量

2021-02-03 14:51:34

MySQL數(shù)據(jù)庫壓測工具

2017-10-31 09:43:31

2021-03-05 13:30:51

MySQL數(shù)據(jù)庫壓測工具

2020-12-03 09:57:34

MySQL壓測工具數(shù)據(jù)庫

2020-06-17 08:55:22

mysqlslapsysbenchMySQL

2014-07-10 10:33:47

CoolHash引擎壓測

2014-11-25 11:37:17

壓測 軟件測試

2010-11-22 13:53:46

MySQL數(shù)據(jù)表

2018-07-26 14:50:00

數(shù)據(jù)庫MySQL大表優(yōu)化

2022-11-25 18:49:11

云原生

2023-01-16 08:09:22

PulsarMQ

2023-10-19 08:23:50

wrkOpenResty工具

2010-07-14 10:53:20

Web應(yīng)用

2020-08-06 08:00:51

數(shù)據(jù)分頁優(yōu)化

2019-09-22 21:34:59

數(shù)據(jù)庫平滑變更表結(jié)構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號