mysql的存储引擎innodb、myisam对插入影响和索引对插入的影响
2017-03-18 17:21
866 查看
前言
一直好奇mysql的存储引擎innodb和myisam对插入影响和索引对插入的影响。这次我就来做个测试,以下测试供大家参考。
drop table userinfo; CREATE TABLE userinfo ( uuid int(11) auto_increment NOT NULL, name varchar(64) NOT NULL DEFAULT '', email varchar(64) NOT NULL DEFAULT '', password varchar(64) NOT NULL DEFAULT '', dob date DEFAULT NULL, address varchar(255) NOT NULL DEFAULT '', city varchar(64) NOT NULL DEFAULT '', state_id tinyint unsigned NOT NULL DEFAULT '0', zip varchar(8) NOT NULL DEFAULT '', country_id smallint unsigned NOT NULL DEFAULT '0', gender enum('M','F') NOT NULL DEFAULT 'M', account_type varchar(32) NOT NULL DEFAULT '', verified tinyint NOT NULL DEFAULT '0', allow_mall tinyint unsigned NOT NULL DEFAULT '0', parrent_account int unsigned NOT NULL DEFAULT '0', closest_airport varchar(3) NOT NULL DEFAULT '', PRIMARY KEY(uuid), UNIQUE KEY email (email), KEY country_id (country_id), KEY state_id (state_id), KEY state_id_2 (state_id,city,address) )ENGINE=InnoDB;
set global log_bin_trust_function_creators = 1; DROP FUNCTION IF EXISTS rand_string; DELIMITER $$ CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255) BEGIN DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; DECLARE return_str varchar(255) DEFAULT ''; DECLARE i INT DEFAULT 0; WHILE i < n DO SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1)); SET i = i +1; END WHILE; RETURN return_str; END $$ DELIMITER ;
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_userinfo_uuid`(IN item INTEGER) BEGIN DECLARE counter INT; SET counter = item; WHILE counter >= 1 DO insert into userinfo (uuid,name,email,password,dob,address,city,state_id,zip,country_id,gender,account_type,verified,allow_mall,parrent_account,closest_airport) values(uuid(),rand_string(64), rand_string(64), rand_string(64), '2010-10-10', rand_string(255), rand_string(64), ceil(rand() * 100), rand_string(8), ceil(rand() * 100), 'M', rand_string(32), 0, 0, 0, rand_string(3)); SET counter = counter - 1; END WHILE; END$$ DELIMITER ;
为了节省时间,10000条数据测试。
innodb下面的数据数据插入(去掉所有的索引,没有uuid列)
myisam下面的数据数据插入(去掉所有的索引,没有uuid列)
总之这个差距还是有的,如果数据量在足够大的话,差距会更明显。
如果insert大量的数据,不妨先将存储引擎先设为myisam,导入数据后改为innodb
主键索引下面的数据数据插入(同为innodb,主键索引和无主键索引的比较,可以参考上面测试innodb那个)
这个和第一个测试的差距还是比较小的,但是数据量不是很大。
好了就玩到此,如若哪天有兴趣,在跑个多点的数据。
相关文章推荐
- mysql数据据存储引擎InnoDB和MyISAM的优势及区别
- mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
- MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法
- mysql存储引擎:InnoDB和MyISAM的区别与优劣
- mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
- mysql存储引擎:InnoDB和MyISAM的区别与优劣
- mysql 存储引擎 InnoDB和myisam存储引擎的区别 /(自己小结)
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- mysql修改表的存储引擎(myisam<=>innodb)
- 【转载】InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- Mysql innodb引擎和myisam引擎 使用索引区别
- mysql存储引擎:InnoDB和MyISAM的区别与优劣
- mysql存储引擎:InnoDB和MyISAM的区别与优劣(转)
- mysql存储引擎:InnoDB和MyISAM的差别/优劣评价/评测/性能测试
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- Mysql存储引擎InnoDB和MyISAM的区别对比
- Mysql innodb引擎和myisam引擎使用索引区别
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
- 浅谈MySQL存储引擎选择 InnoDB还是MyISAM
- MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法