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

简介: 本文介绍了扫描全部/部分分库分表的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分表上,合并结果集后返回。
相关文章
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
367 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
Java 关系型数据库 MySQL
阿里巴巴Java开发手册简介(终极版、华山版、泰山版)(附下载地址)
阿里巴巴Java开发手册简介(终极版、华山版、泰山版)(附下载地址)
9405 0
|
Java Unix Linux
Maven 3.6.3 的下载、安装、配置、检测(详细讲解)
Maven 3.6.3 的下载、安装、配置、检测(详细讲解)
13827 0
Maven 3.6.3 的下载、安装、配置、检测(详细讲解)
|
8月前
|
存储 SQL 运维
中国联通网络资源湖仓一体应用实践
本文分享了中国联通技术专家李晓昱在Flink Forward Asia 2024上的演讲,介绍如何借助Flink+Paimon湖仓一体架构解决传统数仓处理百亿级数据的瓶颈。内容涵盖网络资源中心概况、现有挑战、新架构设计及实施效果。新方案实现了数据一致性100%,同步延迟从3小时降至3分钟,存储成本降低50%,为通信行业提供了高效的数据管理范例。未来将深化流式数仓与智能运维融合,推动数字化升级。
411 0
中国联通网络资源湖仓一体应用实践
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
9月前
|
存储 人工智能 BI
Paimon 1.0: Unified Lake Format for Data + AI
Paimon 1.0: Unified Lake Format for Data + AI
200 5
|
存储 关系型数据库 MySQL
【MySQL系列笔记】分库分表
分库分表是一种数据库架构设计的方法,用于解决大规模数据存储和处理的问题。 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储,这就相当于原来一台服务器提供服务现在改成多台服务器组成集群共同提供服务。
580 8
|
Java Shell 应用服务中间件
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
这篇文章介绍了如何在Mac系统下配置Java JDK、Maven和Tomcat的环境变量,包括配置文件的选择、解决环境变量在zsh shell中无效的问题、查看和设置系统环境变量的方法,以及JDK和Maven的下载、配置和测试步骤。
5665 1
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
|
关系型数据库 MySQL 分布式数据库
PolarDB-X最佳实践系列(三):如何实现高效的分页查询
分页查询是数据库中常见的操作。本文将介绍,如何在数据库中(无论是单机还是分布式)高效的进行翻页操作。
113345 12
PolarDB-X最佳实践系列(三):如何实现高效的分页查询
|
SQL 分布式计算 数据库
Spark SQL
Spark SQL
290 1