探讨写作速度在MySQLInnoDB表索引和提交频率的影响

探讨写作速度在MySQLInnoDB表索引和提交频率的影响
这一次,我们在索引和提交频率对InnoDB表写速度影响看,看有什么需要注意的。

让我们直接得出一些结论。

1。索引对写作速度的影响:

A,如果有一个自增加的主键和相对完整的没有索引,写速度大约是3.11%。

B,如果有一个自添加主键,二级索引相对完全索引,写速度减少约27.37%。

因此,InnoDB表都必须有一个自增列作为主键。

2。提交频率对写入速度的影响(以主键仅在表中添加的场景,以及数据的30万行作为示例)。

a,等待所有数据被写入,提交提交的最终执行效率最高。

每10万行提交一次,相对一次性提交,约1.17%份;

每1万行提交一次,相对一次性提交,约3.01%份;

每1000行提交一次,相对一次性提交,约23.38%份;

每100行提交一次,相对一次性提交,约24.44%份;

F,每10行提交一次,相对一次性提交,约92.78%份;

每一行提交一次,相对一次性提交,约546.78%份,即慢5倍;

因此,最好是在所有事务结束后批量提交所有事务,而不是每次执行SQL后提交它。

有一个使mysqldump启用扩展插入和导出SQL脚本对比试验,它比以前慢5倍以上。

重要的是:这个建议不是绝对正确的。这取决于具体的场景,如果是一个高并发性的在线业务,您需要尽快提交事务,以避免锁范围的扩大,但如果是在非高并发业务场景中,特别是在数据批量导入的情况下,建议采用批提交。

下面是一个详细的测试用例过程,感兴趣的同学可以看看:
如果表滴存在` mytab `;
创建表(` mytab `
` ID ` int(10)符号的非空auto_increment,
int(11)不是NULL默认值0,
C2 int(11)不是NULL默认值0,
` C3 `时间零违约current_timestamp更新current_timestamp,
` C4 ` varchar(200)不为空的默认,
主键(id)
InnoDB引擎=);

Where DELIMITER
如果存在` insert_mytab `下降过程;

创建程序` insert_mytab `(在行号int,在commitrate int)
开始
声明int默认为0;

设置自动提交= 0;

当我0)和(我commitrate = 0)然后
承诺;
选择concat('commitrate:',commitrate,' ',我);
最后如果;

结束的时候;

最后再提交,确保成功。

承诺;
选择全部提交;

结束;***

#测试呼叫
电话insert_mytab(300000, 1);一个提交
电话insert_mytab(300000, 10);一个提交每10次
电话insert_mytab(300000, 100);一个提交每100次
电话insert_mytab(300000, 1000);一个提交每1000次
电话insert_mytab(300000, 10000);-每1万份
电话insert_mytab(300000, 100000);一个提交每10万次
电话insert_mytab(300000, 0);一次提交

测试耗时比较:
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部