文/温国兵

「问题」

高并发写的时候是选择innodb还是myisam呢?或者说如何提高insert效率?
每秒大概有5w - 7w的量(更正下,大概2w - 3w的量),简单的3个int型字段,3个字段是唯一索引,如何提高insert ignore的速度?

简单描述下应用场景,每天的uv和ip分表,uv 4m ip 33m 的数据量,可以忽略查询,只有insert ignore, 3个字段 t d s唯一索引

「我的回答」

「选择InnoDB还是MyISAM」

如果不是对事务要求非常的强,高并发写推荐选择MyISAM。理由如下:
MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少,能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小;
InnoDB存储引擎在插入数据时会花更多的开销在维护完整性、维持事务上,所以效率比MyISAM低;
根据题主的描述,主要是插入数据,并且只有一张表,后期对该表的操作也主要是查询吧,就查询速度而言,MyISAM比InnoDB更优越,并且还有MyISAM索引,可以很好的优化查询速度。

MySQL insert of high concurrency

「如何提高INSERT效率」

根据题主的描述,每秒有5w - 7w的量,诚然这个数据量是相当惊人的。并且数据是实时产生的,那mysqlimport或者load data就无法派上用场。提供几个提高INSERT效率的办法吧。
批量插入VALUES,而不是每一次插入都是一条数据;
删除MySQL的索引,有索引存在插入速度会受很大的影响;
题主的表有3个int字段,并且都是唯一索引,可以指定一个主键。

「是否选择insert ignore」

我们知道有三种插入方法,insert into、replace into及insert ignore。既然题主提供表的3个字段都是唯一的,那不会出现重复的数据,为什么还用insert ignore呢?insert into此时跟insert ignore不是一样。

如上,个人拙见,仅供参考。

–EOF–

原文地址:微信公众号文章

题图来自:MySQL insert of high concurrency

版权声明:自由转载-非商用-非衍生-保持署名(创意共享4.0许可证)