6 Star 72 Fork 28

JustryDeng / notebook

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
[02]分表情况下的联表查询.md 2.38 KB
一键复制 编辑 原始数据 按行查看 历史
JustryDeng 提交于 2023-05-07 09:47 . 分表情况下的联表查询

分表情况下的联表查询示例

结论

提示:

下述结论的解释在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 b2022a2022 join b2023a2023 join b2022a2023 join b2023);而如果进行了绑定,那么就会定向关联,哪个段位的A表就会直接关联哪个段位的B表,不会作多余的关联,此时只会查询两次(a2022 join b2022a2023 join b2023

    sharding对相互绑定的一批表有如下要求:

    详见:org.apache.shardingsphere.sharding.rule.ShardingRule#isValidBindingTableConfiguration

    1. 分库节点要对应都有
    2. 分表节点要对应都有
    3. 使用相同的分库分表算法

相关资料

1
https://gitee.com/JustryDeng/notebook.git
git@gitee.com:JustryDeng/notebook.git
JustryDeng
notebook
notebook
master

搜索帮助