前言
最近复习mysql索引相关性能,需要大批量数据进行测试,记个笔记;
一、创建测试表
CREATE TABLE `user_test` (
`user_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`login_name` VARCHAR(30) NOT NULL COMMENT '登录账号',
`email` VARCHAR(50) DEFAULT '' COMMENT '用户邮箱',
`phonenumber` VARCHAR(11) DEFAULT '' COMMENT '手机号码',
`sex` CHAR(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
`password` VARCHAR(50) DEFAULT '' COMMENT '密码',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`user_id`)
) ENGINE=INNODB AUTO_INCREMENT=1000102 DEFAULT CHARSET=utf8mb4 COMMENT='测试'
二、编写批量插入脚本
1、函数
-- 插入100000条数据
DELIMITER $$
DROP FUNCTION IF EXISTS `test_fun`$$
CREATE FUNCTION `test_fun`() RETURNS INT(11)
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i<num DO
-- 插入语句
INSERT INTO user_test(`login_name`,`email`,`phonenumber`,`sex`,`password`)
VALUES(CONCAT('用户',i),CONCAT(FLOOR(RAND()*((999999-111111)+111111)),'@qq.com'),
CONCAT('135',FLOOR(RAND()*((99999999- 11111111)+11111111))), FLOOR(RAND()*2),UUID());
SET i = i+1;
END WHILE;
RETURN i;
END$$
DELIMITER ;
-- 执行函数
SELECT test_fun();
2、 存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `test_proc`$$
CREATE PROCEDURE `test_proc`()
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 1;
WHILE i<num DO
INSERT INTO user_test(`login_name`,`email`,`phonenumber`,`sex`,`password`)
VALUES(CONCAT('用户',i),CONCAT(FLOOR(RAND()*((999999-111111)+111111)),'@qq.com'),
CONCAT('135',FLOOR(RAND()*((99999999- 11111111)+11111111))), FLOOR(RAND()*2),UUID());
SET i = i+1;
END WHILE;
END$$
DELIMITER ;
CALL test_proc();