No Data

springboot3 shardingsphere5 mysql 绑定表

原创  作者:斩雪碎光阴  发布于:2024年05月14日  阅读量:101
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  分类:  标签:

1.关联查询


对逻辑表user_order,user_order_item进行关联查询:

SELECT uo.order_number orderNumber,SUM(uoi.item_price) AS orderPrice

   FROM user_order uo

   LEFT JOIN user_order_item uoi ON uo.id=uoi.user_order_id

   GROUP BY uo.id

user_order分为两个数据源中的4个分片:

ds_0.user_order_0,ds_0.user_order_1,ds_0.user_order_1,ds_1.user_order_1

user_order_item分为两个数据源中的4个分片:

ds_0.user_order_item_0,ds_0.user_order_item_1,ds_0.user_order_item_1,ds_1.user_order_item_1

使用相同的字段作为分库字段,*两个表都使用关联字段作为分表字段。

此时进行关联查询,由于分库策略相同,因此不会跨库查询,此时:

会对ds_0库进行,user_order_0和user_order_item_0,user_order_1和user_order_item_1,user_order_0和user_order_item_1,user_order_1和user_order_item_0,4次关联查询,

会对ds_1库进行,user_order_0和user_order_item_0,user_order_1和user_order_item_1,user_order_0和user_order_item_1,user_order_1和user_order_item_0,4次关联查询,

后合并结果。

由于两个表都使用关联字段作为分表字段,因此两个表中数据所在的分片有固定的对应关系,可通过配置绑定表,减少实际级联查询次数。


2.配置绑定表


shardingsphereconf.yaml中添加:

...

rules:

 - !SHARDING

   bindingTables:

     - user_order,user_order_item

...

此时:

会对ds_0库进行,user_order_0和user_order_item_0,user_order_1和user_order_item_1,2次关联查询,

会对ds_1库进行,user_order_0和user_order_item_0,user_order_1和user_order_item_1,2次关联查询,

后合并结果。


官方文档:

https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/yaml-config/rules/sharding/


3.打印sql


shardingsphereconf.yaml中添加:

...

props:

   sql-show: true

...


官方文档:

https://shardingsphere.apache.org/document/current/cn/user-manual/common-config/props/


4.参考代码

链接:https://pan.baidu.com/s/1I9wzqOEi0yII1jRz7UEzdA?pwd=1111

提取码:1111

需要用init.sql中语句建表,更换数据库链接和账号密码

相关文章