MySQL百萬級數據壓力測試

先模擬數據:

DROP DATABASE IF EXISTS TEST;
create database TEST charset utf8;
use oldboy;
CREATE TABLE t_100w (id INT,num INT,k1 CHAR(2),k2 CHAR(4),dt TIMESTAMP);

DELIMITER //
CREATE PROCEDURE rand_data(IN num INT)
BEGIN
DECLARE str  CHAR(62) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE str2 CHAR(2);
DECLARE str4 CHAR(4);
DECLARE i  INT DEFAULT 0;
WHILE i<num DO
SET str2=CONCAT(SUBSTRING(str,1+FLOOR(RAND()*61),1),SUBSTRING(str,1+FLOOR(RAND()*61),1));
SET str4=CONCAT(SUBSTRING(str,1+FLOOR(RAND()*61),2),SUBSTRING(str,1+FLOOR(RAND()*61),2));
SET i=i+1;
INSERT INTO t_100w VALUES (i,FLOOR(RAND()*num),str2,str4,NOW());
END WHILE;
END;
//
DELIMITER ;

CALL rand_data(1000000);
COMMIT;
#查詢數據是否正確
select count(*) from TEST.t_100w;
----------+
| count(*) |
+----------+
|  1000000 |
+----------+

如上數據已經準備好;
下一步在linux下下執行如下壓力測試語句:

home/mysql8.0.16/mysql/bin/mysqlslap --defaults-file=/home/mysql8.0.16/mysql/my.cnf --concurrency=100 --iterations=1 --create-schema='test' --query="select * from test.t_100w where k2='CD23'" ENGINE=INNODB --number-of-queries=2000 -uroot -p'123456' -P3307 -verbose

可以看到當前沒有創建任何索引的情況下查詢2000次的時間爲109.204秒;
原因沒有創建索引:

DESC SELECT * FROM t_100w WHERE k2='CD23' ;
 
SHOW INDEX FROM t_100w;

ALTER TABLE t_100w ADD INDEX idx(k2);

DESC SELECT * FROM t_100w WHERE k2='CD23' 

現在將查詢語句進行優化,添加索引後重新執行命令後結果如下:

我們發現時間由109多秒縮減到只有3.7s左右,

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章