当前位置: 首页 > wzjs >正文

网站介绍词快要到期的域名网站

网站介绍词,快要到期的域名网站,电商网站与企业网站区别,怎么做网站关键词大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注实战代码系列最新文章😉C实现图书管理系统(Qt C GUI界面版)SpringBoot实战系列🐷【SpringBoot实战系列】Sharding-Jdbc实现分库…
大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷【SpringBoot实战系列】Sharding-Jdbc实现分库分表到分布式ID生成器Snowflake自定义wrokId实战
环境搭建大集合环境搭建大集合(持续更新)
分库分表分库分表之实战-sharding-JDBC水平分库+水平分表配置实战

前情摘要:

1、数据库性能优化
2、分库分表之优缺点分析
3、分库分表之数据库分片分类
4、分库分表之策略
5、分库分表技术栈讲解-Sharding-JDBC
6、分库分表下的 ID 冲突问题与雪花算法讲解
7、分库分表之实战-sharding-JDBC
8、分库分表之实战-sharding-JDBC广播表
9、分库分表之实战-sharding-JDBC水平分库+水平分表配置实战


【亲测宝藏】发现一个让 AI 学习秒变轻松的神站!不用啃高数、不用怕编程,高中生都能看懂的人工智能教程来啦!

👉点击跳转,和 thousands of 小伙伴一起用快乐学习法征服 AI,说不定下一个开发出爆款 AI 程序的就是你!


本文章目录

  • Sharding-Jdbc绑定表
    • 一、什么是绑定表?
    • 二、为什么需要绑定表?
    • 三、绑定表配置实战
      • 1. sql执行与实体编写
      • 2. 核心配置步骤
        • (1)配置绑定表关系
    • 四、绑定表查询原理
    • 五、注意事项
    • 六、总结

Sharding-Jdbc绑定表

在分布式数据库分片中,多表关联查询一直是性能优化的难点。Sharding-Jdbc提供的绑定表机制,正是为解决同规则分片子表关联问题而生。本文将从核心概念出发,详解绑定表的作用原理,并通过实战案例演示配置过程,帮助你在分布式场景下提升关联查询效率。

一、什么是绑定表?

绑定表指分片规则完全一致的主表与子表。当两张表的分片策略(包括分片键、分片算法)完全相同时,它们就可以建立绑定关系。

举个典型例子:

  • 主表product_order(订单表)按order_id分片
  • 子表product_order_item(订单项表)也按order_id分片

这两张表就互为绑定表。因为它们的分片规则一致,所有order_id=100的记录,都会落入同一个分片(比如分片1),不会出现主表在分片1而子表在分片2的情况。

二、为什么需要绑定表?

没有绑定表时,多表关联会面临两个严重问题:

  1. 笛卡尔积查询灾难
    假设订单表和订单项表各分为3个分片,未配置绑定表时,Sharding-Jdbc会执行3×3=9次跨分片关联(每个分片的主表关联所有分片的子表),产生大量无效计算。

  2. 数据关联错误
    跨分片关联可能导致本应匹配的记录被分散在不同分片,出现查询结果缺失或冗余。

而绑定表通过强制同分片关联,让关联查询仅在相同分片内执行(如分片1的主表只关联分片1的子表),从根本上避免了笛卡尔积,同时保证数据关联的准确性。

三、绑定表配置实战

product_orderproduct_order_item为例,演示如何在Sharding-Jdbc中配置绑定表。

1. sql执行与实体编写

product_order我们已经在之前的项目分库分表之实战-sharding-JDBC水平分库+水平分表配置实战中完成并创建了,接下了我们只需新增product_order_item,我们需要分别执行sql如下:

  • 在ccc_shop_order_0中执行如下sql
CREATE TABLE `product_order_item_0` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`product_order_id` bigint DEFAULT NULL COMMENT '订
单号',`product_id` bigint DEFAULT NULL COMMENT '产品id',`product_name` varchar(128) DEFAULT NULL COMMENT 
'商品名称',`buy_num` int DEFAULT NULL COMMENT '购买数量',`user_id` bigint DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT 
CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
CREATE TABLE `product_order_item_1` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`product_order_id` bigint DEFAULT NULL COMMENT '订
单号',`product_id` bigint DEFAULT NULL COMMENT '产品id',`product_name` varchar(128) DEFAULT NULL COMMENT 
'商品名称',`buy_num` int DEFAULT NULL COMMENT '购买数量',`user_id` bigint DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT 
CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
  • 在ccc_shop_order_1中执行如下sql
CREATE TABLE `product_order_item_0` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`product_order_id` bigint DEFAULT NULL COMMENT '订
单号',`product_id` bigint DEFAULT NULL COMMENT '产品id',`product_name` varchar(128) DEFAULT NULL COMMENT 
'商品名称',`buy_num` int DEFAULT NULL COMMENT '购买数量',`user_id` bigint DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT 
CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
CREATE TABLE `product_order_item_1` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`product_order_id` bigint DEFAULT NULL COMMENT '订
单号',`product_id` bigint DEFAULT NULL COMMENT '产品id',`product_name` varchar(128) DEFAULT NULL COMMENT 
'商品名称',`buy_num` int DEFAULT NULL COMMENT '购买数量',`user_id` bigint DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT 
CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

创建完成之后,我们创建对应实体类ProductOrderItemDO

@Data
@TableName("product_order_item")
@EqualsAndHashCode(callSuper = false)
public class ProductOrderItemDO {private Long id;private Long productOrderId;private Long productId;private String productName;private Integer buyNum;private Long userId;
}

同时新建对应的mapper ProductOrderItemMapper,同时在ProductOrderMapper中编写关联查询语句

public interface ProductOrderItemMapper extendsBaseMapper<ProductOrderItemDO> {
}public interface ProductOrderMapper extendsBaseMapper<ProductOrderDO> {@Select("select * from product_order o left join product_order_item i on o.id = i.product_order_id")List<Object>listProductOrderDetail();
}

为了测试绑定表的作用,我们可以先在DbTest编写一个单元测试函数去测试其发出的sql是怎么样的

@Testpublic void testBingding(){List<Object> list = productOrderMapper.listProductOrderDetail();System.out.println(list);}

在这里插入图片描述

测试结果如上,可以看到。由于我们的product_order和product_order_item他们的分库和分表策略完全一致,因此正常来说,我们只需要去关联查询对应的表就好了,但是这里确发出了整整多出一倍的sql,因此配置绑定表是很有必要的

2. 核心配置步骤

(1)配置绑定表关系

在上述配置基础上,通过binding-tables指定绑定表组:

#绑定表
spring.shardingsphere.sharding.binding‐tables[0] =product_order,product_order_item

配置说明

  • 绑定表组以逗号分隔多个表名,组内所有表必须使用相同的分片键和分片算法
  • 一个绑定组可以包含多个表(如“订单表-订单项表-物流表”三表绑定)

此时,我们再次执行我们的测试函数观察发出的sql

在这里插入图片描述

可以观察到,现在变成了正常的四条

四、绑定表查询原理

当执行关联查询时,Sharding-Jdbc会:

  1. 识别SQL中的主表(通常是FROM后的第一个表)
  2. 根据主表的分片键值计算目标分片(如order_id=100落在分片1)
  3. 强制子表查询仅在主表所在的分片内执行(避免跨分片扫描)
  • 未配置绑定表:可能扫描所有分片的product_orderproduct_order_item,执行2×2=4次关联
  • 配置绑定表后:仅查询分片1的两张表,1次关联即可完成

五、注意事项

  1. 分片规则必须完全一致
    绑定表的分片键、分片算法、分片数量必须严格相同,否则会导致数据关联异常。

  2. 主表选择影响查询效率
    Sharding-Jdbc以FROM后的第一个表作为主表计算分片,建议将数据量较大的表放在前面。

  3. 与广播表的区别
    广播表是全分片同步的表(如字典表),而绑定表是按相同规则分片的表,二者适用场景不同。

  4. 多表绑定需注意顺序
    超过2张表绑定时,确保所有表的分片逻辑一致,避免部分表出现跨分片关联。

六、总结

绑定表是Sharding-Jdbc优化同规则分片子表关联的核心机制,通过约束分片规则一致性,从根源上解决了多表关联的笛卡尔积问题。在实际项目中,只要涉及分片子表的JOIN查询,就应该优先配置绑定表,这能显著降低跨分片计算开销,提升分布式查询的稳定性。

觉得有用请点赞收藏!
如果有相关问题,欢迎评论区留言讨论~


文章转载自:

http://TE5cyIAp.wjLbb.cn
http://jfZ0nxpV.wjLbb.cn
http://eGC6qflG.wjLbb.cn
http://qOmJ2C8g.wjLbb.cn
http://rNdbFr4D.wjLbb.cn
http://5gSzm8jb.wjLbb.cn
http://KuQ0qwQ8.wjLbb.cn
http://Sgtttvvt.wjLbb.cn
http://dKr3ZaMI.wjLbb.cn
http://oyyjNGlY.wjLbb.cn
http://lRFXa9S1.wjLbb.cn
http://HT4V8YuX.wjLbb.cn
http://g6bb4gkp.wjLbb.cn
http://gihKxbjN.wjLbb.cn
http://442UQjtl.wjLbb.cn
http://LoWpAfvE.wjLbb.cn
http://TdssUw97.wjLbb.cn
http://8d5ZD7wZ.wjLbb.cn
http://ouspYCBZ.wjLbb.cn
http://IeNNhLCV.wjLbb.cn
http://BL31zZB5.wjLbb.cn
http://UI4KUqsd.wjLbb.cn
http://HiC2Vl9s.wjLbb.cn
http://8pNpCI7V.wjLbb.cn
http://4Bhjocjt.wjLbb.cn
http://I9GxQ5q8.wjLbb.cn
http://zxGY1pUg.wjLbb.cn
http://X0Vc0or9.wjLbb.cn
http://4KNGlncd.wjLbb.cn
http://QpikKzqK.wjLbb.cn
http://www.dtcms.com/wzjs/619368.html

相关文章:

  • 做网站自适应框架锦州网站开发建设
  • 乾县交通建设网站做企业网站有什么工作内容
  • 望京 网站开发建网站深
  • 河北城乡建设厅网站显示不全wordpress按分类显示图片
  • 个人网站包括哪些内容网页开发工具软件
  • 山东英文网站建站wordpress自定义页脚
  • 做网站哪间好拖曳式网站建设
  • 哪里找做网站的百度seo网站排名
  • 永德网站建设精美的商城网站介绍
  • 江苏建设厅网站电话多少seo查询整站
  • 企业网站模板素材网站建设到维护
  • c 网站开发流程eclipse网站开发实例
  • 九酷为什么做福音网站企业展厅布展设计
  • html网站标题怎么做的建网站找哪里
  • 互动网站如何做如何自己创造游戏
  • php网站制作软件自己建设网站模版
  • 网站建设的小故事网络设计目标及设计思想
  • 企业营销网站模板电商网站开发前景
  • 四川城乡和建设厅网站长春网站推广优化公司
  • 响应式网站 手机版目前什么编码做网站最好
  • 厦门网络建站公司wordpress 柒比贰主题
  • 怎么快速做网站排名免费的行情软件网站下载
  • seo竞争对手网站分析宣传册设计与制作模板免费
  • ps做网站字号大小做效果图展板网站
  • 怎么做网站图片seo电子商务网站建设系统
  • 九江专业的企业网站建设公司wordpress带会员中心的主题
  • 建立网站的方式建购物网站如何运营
  • 济宁房产网站建设网站怎么做自然优化
  • 网站开发图片文字wordpress打不开主页
  • 北京网站建设的价格天聊城网站推广动态