mysql插入百万条数据在innodb和myisam中两种存储引擎的小测试

通过相同的数据,插入到不同的存储引擎但结构相同的表中的实验。

实验环境:

  • 1、操作系统:CentOS 6.7

  • 2、内存:1G(虚拟机)

实验过程

一、插入测试数据
1、建立两张表tbl_user_innodb和tbl_user_myisam

两张表数据结构一样,只不过采用两种不同的存储引擎:

tbl_user_innodb采用innodb引擎

  1. CREATE TABLE `tbl_user_innodb` (
  2. `user_id` int(20) NOT NULL AUTO_INCREMENT,
  3. `user_name` varchar(50) NOT NULL COMMENT '用户名',
  4. `password` varchar(40) NOT NULL COMMENT '密码',
  5. `nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
  6. `email` varchar(60) NOT NULL COMMENT '邮箱',
  7. `mobile` varchar(20) NOT NULL COMMENT '手机号',
  8. `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  9. PRIMARY KEY (`user_id`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

tbl_user_myisam采用MyIsam引擎

  1. CREATE TABLE `tbl_user_myisam` (
  2. `user_id` int(20) NOT NULL AUTO_INCREMENT,
  3. `user_name` varchar(50) NOT NULL COMMENT '用户名',
  4. `password` varchar(40) NOT NULL COMMENT '密码',
  5. `nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
  6. `email` varchar(60) NOT NULL COMMENT '邮箱',
  7. `mobile` varchar(20) NOT NULL COMMENT '手机号',
  8. `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  9. PRIMARY KEY (`user_id`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2、通过mysql的存储过程插入百万条数据

存储过程函数:

(1)InnoDB引擎
  1. BEGIN
  2. DECLARE num INTEGER DEFAULT 1;
  3. WHILE num <= 1000000 DO
  4. INSERT INTO tbl_user_innodb(`user_name`, `password`, `nickname`, `email`, `mobile`) VALUES (concat('malluser',num), MD5(concat('mallpassword',num)), concat('用户', num), concat('mallemail', num, '@mall.com'), concat('1343423456',num));
  5. SET num = num + 1;
  6. END WHILE;
  7. END

插入花费时间:3069.136s

(2)MyISAM引擎:
  1. BEGIN
  2. DECLARE num INTEGER DEFAULT 1;
  3. WHILE num <= 1000000 DO
  4. INSERT INTO tbl_user_myisam(`user_name`, `password`, `nickname`, `email`, `mobile`) VALUES (concat('malluser',num), MD5(concat('mallpassword',num)), concat('用户', num), concat('mallemail', num, '@mall.com'), concat('1343423456',num));
  5. SET num = num + 1;
  6. END WHILE;
  7. END

插入花费时间:22.482s

二、查询测试数据
1、未使用任何索引:
  • (1)、innodb:
  1. select user_id from tbl_user_innodb where user_name = 'malluser487784';

花费时间:0.477s

  • (2)、myisam:
  1. select user_id from tbl_user_myisam where user_name = 'malluser487784';
  2. 花费时间:0.192s
2、给user_name添加一个普通索引

innodb:

  1. select user_id from tbl_user_innodb where user_name = 'malluser487787';

花费时间:0.095s

myisam:

  1. select user_id from tbl_user_myisam where user_name = 'malluser487787';

花费时间:0.001s