MYSQL教程探究MySQL中索引和提交频率对InnoDB表写入速度的影响
《MYSQL教程探究MySQL中索引和提交频率对InnoDB表写入速度的影响》要点: 本次,我们来看看索引、提交频率对InnoDB表写入速度的影响,了解有哪些需要注意的.MYSQL教程 先直接说几个结论吧:MYSQL教程 1、关于索引对写入速度的影响: 因此,InnoDB表最好总是有一个自增列做主键.MYSQL教程 2、关于提交频率对写入速度的影响(以表中只有自增列做主键的场景,一次写入数据30万行数据为例):MYSQL教程 a、等待全部数据写入完成后,最后再执行commit提交的效率最高; 因此,最好是等待所有事务结束后再批量提交,而不是每执行完一个SQL就提交一次. 下面是详细的测试案例过程,有兴趣的同学可以看看:MYSQL教程 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 commitrate 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 (commitrate > 0) AND (i % commitrate = 0) THEN COMMIT; SELECT CONCAT(‘commitrate: ‘,commitrate,‘ 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); ― 一次性提交 测试耗时结果对比: 欢迎参与《MYSQL教程探究MySQL中索引和提交频率对InnoDB表写入速度的影响》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |