提示:
下述结论的解释在demo代码中有体现,这里就不展开了
本结论基于
<dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.1.1</version> </dependency>
默认的,联表查询时,以笛卡尔积
的形式逐个联表查询
即:假设A有3张分表,B有2张分表,C未作分表,那么A、B、C联表查询的就,就会联表查询6(3 ✖ 2 ✖ 1 = 6)次
查询时,可以通过对分表列设置条件(非分表列的话不行),使得只有部分分表符合条件,这样一来,联表查询时,只有这部分分表才会进行笛卡尔积式联表
即:假设A有3张分表,B有2张分表,C未作分表,那么A、B、C联表查询时,通过A的分表列过滤使得A只有2张分表匹配条件,通过B的分表列过滤使得B只有1张分表匹配条件,这样一来最终只会联表查询2(2 ✖ 1 ✖ 1 = 2)次
sharding提供了绑定表功能bindingTables
,通过将一些列的表进行绑定,那么当他们之前进行联表查询时,就会对等查询
即:假设A有分表a2022、a2023,B有分表b2022、b2023,如果不进行绑定,查询时也不通过分表列过滤,那么最终会查询四次(a2022 join b2022
、a2022 join b2023
、a2023 join b2022
、a2023 join b2023
);而如果进行了绑定,那么就会定向关联,哪个段位的A表就会直接关联哪个段位的B表,不会作多余的关联,此时只会查询两次(a2022 join b2022
、a2023 join b2023
)
sharding对相互绑定的一批表有如下要求:
详见:
org.apache.shardingsphere.sharding.rule.ShardingRule#isValidBindingTableConfiguration
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。