| 您的当前位置:首页 --> MYSQL教程 --> 探究MySQL中索引和提交频率对InnoDB表写入速度的影响 |
| MYSQL教程 探究MySQL中索引和提交频率对InnoDB表写入速度的影响 |
| 浏览次数:1096 关键词 ( ) |
| 查看使用该CPU的产品 查看CPU天梯 |
| CPU型号:探究MySQL中索引和提交频率对InnoDB表写入速度的影响 |
| 主频:Ghz |
| 睿频:Ghz |
| 核心数:个 |
| 不支持超核心 |
| 制作工艺: |
| 插槽类型: |
| 功耗:0W |
| L3缓存:0MB |
| 支持最大内存: 0GB |
| CPU详细参数 |
|
本次,我们来看看索引、提交频率对InnoDB表写入速度的影响,了解有哪些需要注意的。 先直接说几个结论吧: 1、关于索引对写入速度的影响: 因此,InnoDB表最好总是有一个自增列做主键。 2、关于提交频率对写入速度的影响(以表中只有自增列做主键的场景,一次写入数据30万行数据为例): a、等待全部数据写入完成后,最后再执行commit提交的效率最高; 因此,最好是等待所有事务结束后再批量提交,而不是每执行完一个SQL就提交一次。 下面是详细的测试案例过程,有兴趣的同学可以看看: 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); — 一次性提交 测试耗时结果对比:
|
| 下一个产品 SQL计算timestamp的差值的方法 上一个产品 关于MySQL中savepoint语句使用时所出现的错误 |