1、建表
DROP TABLE IF EXISTS `t_big_table`;
CREATE TABLE `t_big_table` (
`id` bigint(20) NOT NULL,
`code` varchar(255) DEFAULT NULL,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='大數據表(用於測試sql查詢語句調優)';
2、建存儲過程
DROP PROCEDURE IF EXISTS gen_big_data;
DELIMITER $$
SET AUTOCOMMIT = 0$$
CREATE PROCEDURE gen_big_data(
IN min_num INTEGER,
IN max_num INTEGER
)
BEGIN
DECLARE n DECIMAL (10) DEFAULT min_num ;
dd:LOOP
INSERT INTO t_big_table(id,code,username,password) VALUES (n,UUID(),concat('user-',n),password(n));
COMMIT;
SET n = n+1 ;
IF n = max_num THEN LEAVE dd;
END IF;
END LOOP dd ;
END;$$
DELIMITER ;
3、調用存儲過程,生成測試數據:
例如生成5百萬數據 ,可根據區間,分5次執行,以減少生成數據的時間
call gen_big_data(1,1000000);
call gen_big_data(1000000,2000000);
call gen_big_data(2000000,3000000);
call gen_big_data(3000000,4000000);
call gen_big_data(4000000,5000000);
執行耗時截圖(筆記本配置較低,執行時間較長):
4、統計數據:
一條count語句,速度這麼慢,貌似說不過去,於是給id字段建了個唯一索引(由於id字段是主鍵,擁有主鍵索引,但數據量大時,查詢還是很慢,此處的操作是在主鍵索引上建立唯一索引,即在索引上建索引):
1千萬的數據,導出成sql格式的,共1.37G大小,壓縮下,就279多M了,
t_big_table(含數據).7z 百度網盤鏈接,以備後用,需要的朋友們,可以直接下:
鏈接:https://pan.baidu.com/s/1wGkXiEhSHH_XUJR-x96pcg
提取碼:qrnp
參考文檔:
Mysql 生成億級測試數據 https://blog.csdn.net/qq_36431213/article/details/81304645
MySQL存儲過程(帶輸入參數)實例 https://www.cnblogs.com/halo-halo/p/9026078.html