splittable中的splitstrategy通过splitkey获取分库分表信息,以及表对应的splitnode
splitnode 中的master和slaves实现读写分离。
DB分库分表查询总结
clinet =====> matrix(数据处理整合merge)========>DB0,DB1
select * from a where a.id =1 or a.id =2
id=1 路由到DB0,id=2路由到DB1
先从DB0和DB1中分别查出数据然后在matrix中整合数据然后返回给client
架构中优化器作用:
预处理
函数提前计算
a. id = 1 + 1 => id = 2
判断永真/永假式
a. 1 = 1 and id = 1 => id = 1
b. 0 = 1 and id = 1 => 空结果
合并范围
a. id > 1 or id < 5 => 永真式
b. id > 1 and id = 3 => id = 3
类型处理
id = ‘1’ => id为数字类型,自动Long.valueof(1)
create=‘2015-02-14 12:12:12’ => create为timestamp类型,解析为时间类型
条件下推
Where条件下推
a. select from ( A ) o where o.id = 1
=> select from ( A.query(id = 1) )
JOIN中非join列的条件下推
a. A join B on A.id = B.id where A.name = 1 and B.title = 2
=> A.query(name = 1) join B.query(title = 2) on A.id = B.id
等值条件的推导
a. A join B on A.id = B.id where A.id = 1 => B.id = 1
条件处理
order by下推
join下推
广播表Join
原理:将小表数据复制到所有分库节点,优化为本地join
Join Group(分库键上的Join)
原理:拆分规则相同表属于一个join group,针对分区键join可下推为多个分表的本地join
跨库Join
Nested Loop及衍生
Sort Merge
join策略优化
merge优化
Ø预处理
Ø条件下推
ØOrder By下推
ØJOIN 下推
ØJOIN策略的选择
ØMerge优化
²执行器