探究MySQL中索引和提交频率对InnoDB表写入速度的影
本次,我们来看看索引、提交频率对InnoDB表写入速度的影响,了解有哪些需要注意的。
先直接说几个结论吧
1、关于索引对写入速度的影响
a、如果有自增列做主键,相对完全没索引的情况,写入速度约提升 3.11%;
b、如果有自增列做主键,并且二级索引,相对完全没索引的情况,写入速度约降低 27.37%;
,InnoDB表最好总是有一个自增列做主键。
2、关于提交频率对写入速度的影响(以表中只有自增列做主键的场景,一次写入数据30万行数据为例)
a、等待全部数据写入完成后,再执行mit提交的效率最高;
b、每10万行提交一次,相对一次性提交,约慢了1.17%;
c、每1万行提交一次,相对一次性提交,约慢了3.01%;
d、每1千行提交一次,相对一次性提交,约慢了23.38%;
e、每100行提交一次,相对一次性提交,约慢了24.44%;
f、每10行提交一次,相对一次性提交,约慢了92.78%;
g、每行提交一次,相对一次性提交,约慢了546.78%,也就是慢了5倍;
,最好是等待所有事务结束后再批量提交,而不是每执行完一个SQL就提交一次。
曾经有一次对比测试mysqldump启用extended-insert和未启用导出的SQL脚本,后者比前者慢了不止5倍。
重要这个建议并不是绝对成立的,要看具体的场景。如果是一个高并发的在线业务,就需要尽快提交事务,避免锁范围被扩大。但如果是在非高并发的业务场景,尤其是做数据批量导入的场景下,就建议采用批量提交的方式。
狼蚁网站SEO优化是详细的测试案例过程,有兴趣的同学可以看看
DROP TABLE IF EXISTS `mytab`; CREATE TABLE `mytab` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `c1` int(11) NOT NULL DEFAULT ‘0', `c2` int(11) NOT NULL DEFAULT ‘0', `c3` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `c4` varchar(200) NOT NULL DEFAULT ”, PRIMARY KEY (`id`) ) ENGINE=InnoDB; DELIMITER $$$ DROP PROCEDURE IF EXISTS `insert_mytab`; CREATE PROCEDURE `insert_mytab`(in rownum int, in mitrate int) BEGIN DECLARE i INT DEFAULT 0; SET AUTOCOMMIT = 0; WHILE i < rownum DO INSERT INTO mytab(c1, c2, c3,c4) VALUES( FLOOR(RAND()rownum),FLOOR(RAND()rownum),NOW(), REPEAT(CHAR(ROUND(RAND()255)),200)); SET i = i+1; / 达到每 COMMITRATE 频率时提交一次 / IF (mitrate > 0) AND (i % mitrate = 0) THEN COMMIT; SELECT CONCAT(‘mitrate: ‘, mitrate, ‘ in ‘, I); END IF; END WHILE;
/ 最终再提交一次,确保成功 /
COMMIT; SELECT ‘ALL COMMIT;'; END; $$$ #测试调用 call insert_mytab(300000, 1); — 每次一提交 call insert_mytab(300000, 10); — 每10次一提交 call insert_mytab(300000, 100); — 每100次一提交 call insert_mytab(300000, 1000); — 每1千次一提交 call insert_mytab(300000, 10000); — 每1万次提交 call insert_mytab(300000, 100000); — 每10万次一提交 call insert_mytab(300000, 0); — 一次性提交
测试耗时结果对比
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程