10.6 分库分表之后,性能提升不明显或反而下降,怎么办



分库分表之后的表,有一些自己的特点,需要注意。否则会导致性能提升不明显或性能下降。

一、分库分表之后,性能提升不明显或反而下降,怎么办

1.1 查询语句中,尽可能带有拆分字段

  • 比如:表是按照时间范围拆分的,前年、去年、今年分别放进一个库里。如果要查询一条交易记录,那么where子句中,或查询条件子句中,要尽可能带有时间的字段,目的是让dble清晰的知道,去具体哪个数据分片上找。

1.2 插入语句中,必须带有拆分字段

以上的查询语句:尽量带。即使不带,起码还能用,只是性能差;

但是,插入语句中,必须带有拆分字段。

1.3 拆分字段尽量等值

等值:比如:等于去年;比如:等于去年+等于今年。用等于号,直接转发

模糊:就是群发,搜集回来再做结果的拼装。消耗dble性能。

1.4 减少表的搜索遍历

尽量减少全表扫描。

1.5 减小结果集

1.6 跨节点连表

1.

比如:有一张表是收入表,另一张表是支出表。两者可能经常连表。

拆分规则:时间。

库1库2库3
收入表(前年)收入表(去年)收入表(今年)
支出表(前年)支出表(去年)支出表(今年)

查询时,要连表,查询的时间是去年。

那么,此时就只去库2中找即可。dble中间件就只是精准转发给库2。

3.

驱动表:就是连表时的左表。

过滤条件越多,表的数据量越少,连表速度越快;

4.

因为越是跨节点,越是需要将大量的中间结果汇聚到dble中间件上,然后进行处理。效率变低。

二、小结

  • 不好的做法:比如一个数据分片是100万行,十个数据分片先汇聚起来,就是1000万行。然后dble要处理1000万行的数据,压力很大。
  • 最好:下面每一个数据分片各自并发的先处理自己的100万行,然后汇聚,更快。

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 10.6 分库分表之后,性能提升不明显或反而下降,怎么办


Follow excellence, and success will chase you.