PolarDB-X 1.0-SQL 手册-Hint-扫描全部/部分分库分表

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2 HINT。

本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2 HINT

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

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

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

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

注意:

  • 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 官方客户端命令

语法


  1. # SCAN HINT

  2. # 将 SQL 语句下发到所有分库的所有分表上执行
  3. SCAN()                              

  4. # 将 SQL 语句下发到指定分库的所有分表上执行
  5. SCAN(NODE="node_list")               # 指定分库

  6. # 将 SQL 语句下发到指定分库分表上执行,根据条件计算物理表名称
  7. SCAN(
  8.  [TABLE=]"table_name_list"          # 逻辑表名
  9.  , CONDITION="condition_string"     # 使用 TABLE 和 CONDITION 中的内容计算物理库表名称
  10.  [, NODE="node_list"])             # 过滤通过 CONDITION 计算出的结果,仅保留指定物理库

  11. # 将 SQL 语句下发到指定分库分表上执行,显式指定物理表名
  12. SCAN(
  13.  [TABLE=]"table_name_list"          # 逻辑表名
  14.  , REAL_TABLE=("table_name_list")   # 物理表名,对所有物理库使用相同的物理表名
  15.  [, NODE="node_list"])             # 过滤通过 CONDITION 计算出的结果,仅保留指定物理库


  16. # 物理/逻辑表名列表
  17. table_name_list:
  18.    table_name [, table_name]...

  19. # 物理库列表,支持 GROUP_KEY 和 GROUP 的序号, 可以通过 `SHOW NODE` 语句获得
  20. node_list:
  21.    {group_key | group_index}[,{group_key | group_index}]...

  22. # 支持 SQL WHERE 的语法,需要为每一张表设置条件,如:t1.id = 2 and t2.id = 2
  23. condition_string:
  24.    where_condition

示例

  • 在所有分库的所有分表上执行
  1. SELECT /*+TDDL:scan()*/ COUNT(1) FROM t1
  • 执行后会下发 SQL 语句到t1的所有物理表上执行,并将结果集合并后返回
  • 在指定分库的所有分表上执行
  1. SELECT /*+TDDL:scan(node='0,1,2')*/ COUNT(1) FROM t1
  • 执行后会首先计算出t1在 0000, 0001, 0002 分库上的所有物理表,然后下发 SQL 语句并将结果集合并后返回。
  • 按条件在指定分表上执行
  1. SELECT /*+TDDL:scan('t1', condition='t1.id = 2')*/ COUNT(1) FROM t1
  • 执行后会首先计算出逻辑表t1满足 condition 条件的所有物理表,然后下发 SQL 语句并将结果集合并后返回。
  • 按条件在指定分表上执行,有 JOIN 的情况
  1. 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 计算出的两个键值对应的分库不一致,就会报错。
  • 在指定分库分表上执行,显式指定物理表名
  1. SELECT /*+TDDL:scan('t1', real_table=("t1_00", "t1_01"))*/ COUNT(1) FROM t1
  • 执行后会下发 SQL 语句到所有分库的t1_00``t1_01分表上,合并结果集后返回。
  • 在指定分库分表上执行,显式指定物理表名, 有 JOIN 的情况
  1. 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分表上,合并结果集后返回。
相关文章
|
SQL 关系型数据库 分布式数据库
PolarDB常见问题之tbl_order_link_imei的扫描行不是1如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
SQL Cloud Native 分布式数据库
PolarDB-X 1.0-用户指南-数据表管理-关闭全表扫描
PolarDB-X默认为新创建的表开启全表扫描功能,但频繁使用全表扫描功能会占用数据库资源降低查询效率,本文将介绍如何在控制台上手动关闭全表扫描。
2712 0
PolarDB-X 1.0-用户指南-数据表管理-关闭全表扫描
|
SQL 关系型数据库 MySQL
PolarDB-X 1.0-用户指南-自定义HINT-自定义SQL超时时间
在 PolarDB-X 中,PolarDB-X 节点与 RDS 的默认的 SQL 执行超时时间是 900 秒(可以调整),但是对于某些特定的慢 SQL,其执行时间可能超过了 900 秒 。针对这种慢 SQL,PolarDB-X 提供了调整超时时间的自定义 HINT。通过这个自定义 HINT 可以任意调整 SQL 执行时长。
261 0
|
SQL 关系型数据库 MySQL
PolarDB-X 1.0-用户指南-自定义HINT-扫描全部或部分分库分表
除了可以将SQL单独下发到一个或多个分库执行,POlarDB-X还提供了扫描全部/部分分库与分表的SCAN HINT。使用SCAN HINT,您可以一次将SQL下发到每一个分库执行, 比如查看某个分库上的所有分表,或者查看某个逻辑表的每张物理表中的数据量等。
283 0
|
SQL 关系型数据库 MySQL
PolarDB-X 1.0-用户指南-自定义HINT-指定分库执行 SQL
在使用PolarDB-X的过程中,如果遇到某个PolarDB-X不支持的 SQL 语句,可以通过PolarDB-X提供的NODE HINT,直接将 SQL 下发到一个或多个分库上去执行。此外如果需要单独查询某个分库或者已知分库的某个分表中的数据,也可以使用NODE HINT,直接将 SQL 语句下发到分库中执行。
233 0
|
SQL 关系型数据库 MySQL
PolarDB-X 1.0-用户指南-自定义HINT-读写分离
PolarDB-X 提供了一种针对应用层透明的读写分离实现。但是由于 RDS 主实例与只读实例之间数据的同步存在着毫秒级别的延迟,如果在主库中变更以后需要马上读取变更的数据,则需要保证将读取数据的 SQL 下发到主实例中。针对这种需求,PolarDB-X 提供了读写分离自定义 HINT,指定将 SQL 下发到主实例或者只读实例。 本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2 HINT 简介。
204 0
|
SQL XML 存储
PolarDB-X 1.0-SQL 手册--SQL使用限制
PolarDB-X高度兼容MySQL协议和语法,但由于分布式数据库和单机数据库存在较大的架构差异,存在SQL使用限制。本文将介绍相关SQL的使用限制。
348 0
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
444 13

相关产品

  • 云原生分布式数据库 PolarDB-X