MyCat中ER表子表批量插入效率低的解决方案

MySQL版本:Mysql5.6.24 
Mycat版本:5.5.8-mycat-1.4-RC-20150713190023


分片规则如下:

     


测试结果:

主表p_test  记录数: 10580
子表s_test  记录数: 10580

通过mycat向mysql里灌数据,主表p_test数据在秒级能插入完成。
但子表s_test的插入速度实在是太慢了,基本上是每秒1条。1w多条数据要将近3个小时,传出去岂不是被笑死。


大胆的猜测:
应用都停了,只有mycat在向数据库里灌数据。经测试发现,在向mycat灌数据时,非ER表的插入速度还比较正常。

ER表的主表插入速度也正常,ER表的子表插入速度会比较慢。为什么呢?


可能是因为ER表的子表中没有分片规则,当插入ER表的子表一条数据时,必须遍历所有主表的数据后,才能知道将子表插入到那个节点。
如果我们能给子表增加一个分片规则,这样子表插入的效率能否提高呢?


于是我们参照主表的分片规则,给子表增加了一个分片字段。

这样在业务上并不会破坏原有ER表的关系,且由于有了分片规则,理论上插入的效率相对于没有分片规则的表的效率应该会有提升。



经测试证明:
我们尝试了在ER表子表里增加了与主表片键相同的冗余字段,子表的插入效率提高了至少100倍。
















你可能感兴趣的:(MySQL)