分库分表之后的表,有一些自己的特点,需要注意。否则会导致性能提升不明显或性能下降。
一、分库分表之后,性能提升不明显或反而下降,怎么办
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万行,然后汇聚,更快。
Comments | NOTHING