开发指南—常见问题—扫描全部/部分分库分表

简介: 本文介绍了扫描全部/部分分库分表的HINT语法和示例。

除了可以将SQL单独下发到一个或多个分库执行,PolarDB-X还提供了扫描全部/部分分库与分表的SCAN HINT。使用SCAN HINT,您可以一次将SQL下发到每一个分库执行, 比如查看某个分库上的所有分表,或者查看某个逻辑表的每张物理表中的数据量等。

通过SCAN HINT,可以指定四种执行SQL的方式:

  1. 在所有分库的所有分表上执行;
  2. 在指定分库的所有分表上执行;
  3. 在指定分库分表上执行,根据条件计算物理表名称;
  4. 在指定分库分表上执行,显式指定物理表名;

SCAN HINT支持 DML、DDL和部分DAL语句。

语法


# SCAN HINT
# 将SQL语句下发到所有分库的所有分表上执行
SCAN()                               
# 将SQL语句下发到指定分库的所有分表上执行
SCAN(NODE="node_list")               # 指定分库
# 将SQL语句下发到指定分库分表上执行,根据条件计算物理表名称
SCAN(
  [TABLE=]"table_name_list"          # 逻辑表名
  , CONDITION="condition_string"     # 使用TABLE和CONDITION中的内容计算物理库表名称
  [, NODE="node_list"] )             # 过滤通过CONDITION计算出的结果,仅保留指定物理库
# 将SQL语句下发到指定分库分表上执行,显式指定物理表名
SCAN(
  [TABLE=]"table_name_list"          # 逻辑表名
  , REAL_TABLE=("table_name_list")   # 物理表名,对所有物理库使用相同的物理表名
  [, NODE="node_list"] )             # 过滤通过CONDITION计算出的结果,仅保留指定物理库
# 物理/逻辑表名列表
table_name_list: 
    table_name [, table_name]...
# 物理库列表,支持GROUP_KEY和GROUP的序号, 可以通过`SHOW NODE`语句获得 
node_list: 
    {group_key | group_index} [, {group_key | group_index}]...
    
# 支持SQL WHERE的语法,需要为每一张表设置条件,如:t1.id = 2 and t2.id = 2
condition_string: 
    where_condition

注意事项

  • PolarDB-X自定义HINT支持/*+TDDL:hint_command*//!+TDDL:hint_command*/两种格式。
  • 如果使用/*+TDDL:hint_command*/格式,在使用MySQL官方命令行客户端执行带有PolarDB-X自定义HINT的SQL时,请在登录命令中加上-c 参数。否则,由于PolarDB-X自定义HINT是以MySQL 注释形式使用的,该客户端会将注释语句删除后再发送到服务端执行,导致PolarDB-X自定义HINT失效。具体请查看MySQL 官方客户端命令

示例

  • 在所有分库的所有分表上执行:
SELECT /*+TDDL:scan()*/ COUNT(1) FROM t1
  • 执行后会下发SQL语句到t1的所有物理表上执行,并将结果集合并后返回。
  • 在指定分库的所有分表上执行:
SELECT /*+TDDL:scan(node='0,1,2')*/ COUNT(1) FROM t1
  • 执行后会首先计算出t1在0000, 0001, 0002分库上的所有物理表,然后下发SQL语句并将结果集合并后返回。
  • 按条件在指定分表上执行:
SELECT /*+TDDL:scan('t1', condition='t1.id = 2')*/ COUNT(1) FROM t1
  • 执行后会首先计算出逻辑表t1满足condition条件的所有物理表,然后下发SQL语句并将结果集合并后返回。
  • 按条件在指定分表上执行,有JOIN的情况:
SELECT /*+TDDL:scan('t1, t2', condition='t1.id = 2 and t2.id = 2')*/ * FROM t1 a JOIN t2 b ON a.id = b.id WHERE b.name = "test"
  • 执行后会首先计算出逻辑表t1t2满足 condition 条件的所有物理表,然后下发 SQL 语句并将结果集合并后返回。 注意:使用该自定义注释需要保证两张表的分库和分表数量一致,否则PolarDB-X计算出的两个键值对应的分库不一致,就会报错。
  • 在指定分库分表上执行,显式指定物理表名:
SELECT /*+TDDL:scan('t1', real_table=("t1_00", "t1_01"))*/ COUNT(1) FROM t1
  • 执行后会下发SQL语句到所有分库的t1_00``t1_01分表上,合并结果集后返回。
  • 在指定分库分表上执行,显式指定物理表名, 有JOIN的情况:
SELECT /*+TDDL:scan('t1, t2', real_table=("t1_00,t2_00", "t1_01,t2_01"))*/ * FROM t1 a JOIN t2 b ON a.id = b.id WHERE b.name = "test";
  • 执行后会下发SQL语句到所有分库的t1_00t2_00t1_01t2_01分表上,合并结果集后返回。
相关文章
|
机器学习/深度学习 Kubernetes Cloud Native
【云原生】学习K8s的扩展技能(CRD)
【云原生】学习K8s的扩展技能(CRD)
859 0
【云原生】学习K8s的扩展技能(CRD)
|
Web App开发 JSON 前端开发
记录读卡器调用跨域问题的解决思路
1.环境不同遇到差异性问题 2.跨域问题 3.问题解决思路
944 0
记录读卡器调用跨域问题的解决思路
|
自然语言处理 监控 搜索推荐
搜索运营有哪些玩法,你知道吗?
大部分产品的搜索都是技术同学在不断的优化迭代,很容易忽视可以直接触达业务侧的运营同学的作用和价值。那今天就和大家分享下运营同学在搜索上有哪些玩法?阿里云开放搜索作为一站式可视化搜索开发平台,产品/运营同学可以在控制台参与哪些优化动作呢?
1409 1
搜索运营有哪些玩法,你知道吗?
|
容器
零起点入门系列教程③:创建一个简单的在线审批流程
【零起点入门系列教程】将会带给大家从业务视角出发由浅入深地学习用宜搭实现应用搭建。即便是没有任何代码基础的新手只要跟着系列课程,从0开始慢慢修炼,也能找到成功搭建应用的乐趣。今天第三讲,分步教学,快速创建一个简单的审批流程。
2878 1
零起点入门系列教程③:创建一个简单的在线审批流程
|
JavaScript 前端开发 关系型数据库
Vue3 Typescript + Axios 全栈开发教程:手把手教你写「待办清单」APP
Vue3 的源码使用 TypeScript 编写,而 TypeScript 是 JS 的一个超集,主要提供对 ES6 的支持,以及更棒的代码可读性和高维护性。Axios 是基于 Promise 的 HTTP 请求库,它用在 node.js 和浏览器里,在本教程中我们使用 Vue3 Typescript 配合 Axios 通过 Get / Post / Put / Delete 请求与后端通讯。本文通过手把手教你写一个前端「待办清单」app,带领大家详细理解 Vue3 Typescript 与 Axios 如何配置及如何与后端通讯,助你成为 Vue3 Typescript 与 Axios 全栈开
|
弹性计算 运维 Linux
阿里云学生机购买指南(用途和优势)
现在国内知名大牌云服务商(阿里云)对学生都是很优惠的,阿里云学生服务器,阿里云也推出了9.5元购买云服务器的优惠活动,是一款固定的优惠套餐,包含特价云服务器,但是好多学生却不知道在哪里申请,需要什么条件,流程是怎么样的,下面给大家做个介绍 云翼计划是阿里云校园扶持计划,24岁以下或拥有学信网认证信息即可享优惠产品、创业扶持等多项权益哦!包括:专属云服务器产品优惠、校园产品使用攻略等。
8065 1
阿里云学生机购买指南(用途和优势)
|
canal 消息中间件 存储
Canal监听MySQL Binarylog消费实践
在MySQL作为如今最为主流使用的数据库背景下,除了常规的数据存储使用场景,还存在大量的使用需求,如:数据自动同步,数据更新监听等场景。由于数据库层面的增量数据变动无法依靠应用服务层面进行有效感知,因此,还是需要从数据库自身提供的机制入手进行实现处理。下面为将展示关于如何借助Canal实践解决场景的几个业务场景问题
|
传感器 存储 供应链
合约机又来了?Redmi K30i曝光,起售价仅1799元
Redmi K30系列大概是红米更新时间最长的手机了,从2019年12月发布Redmi K30开始,到今年3月才更新完,这个系列包括Redmi K30、Redmi K30 5G、Redmi K30 Pro和Redmi K30 Pro Zoom。不过根据最新消息,这个大家庭很可能还要增加一位新成员——Redmi K30i。
455 0
合约机又来了?Redmi K30i曝光,起售价仅1799元
|
人工智能 5G 调度
华为Fellow艾伟:Mate20的心脏——麒麟980性能全揭秘
我们与华为芯片和硬件的产品和技术规划负责人,华为 Fellow 艾伟聊了聊,深入了解了麒麟 980 更多的细节,以及华为在新一代芯片背后的研发历程。
1249 0
华为Fellow艾伟:Mate20的心脏——麒麟980性能全揭秘
|
安全 JavaScript Java
无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范(一)
无规矩不成方圆,聊一聊 Spring Boot 中 RESTful 接口设计规范(一)