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分表上,合并结果集后返回。
相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
2月前
|
SQL 存储 流计算
Flink SQL 在快手实践问题之表示 Mini-Batch hint如何解决
Flink SQL 在快手实践问题之表示 Mini-Batch hint如何解决
29 0
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之将RDS切换到PolarDB-X 2.0时,代码层的SQL该如何改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之是否支持分库分表创建数据库
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
3月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL 运维 安全
数据管理DMS产品使用合集之执行SQL时,如何添加Hint来改变查询的执行计划
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
46 1
|
5月前
|
SQL 存储 缓存
PolarDB-X SQL限流
本文首先介绍了SQL限流的使用场景,它可通过限制边缘业务查询,留出资源来为核心业务保驾护航。接着是功能简介,PolarDB-X结合自身云原生分布式的特点,提供了具有简洁易用的交互接口、多样的限流策略、平均复杂度O(1)、节点级限流实例级监控的SQL限流能力。
119 1
PolarDB-X SQL限流
|
5月前
|
SQL Java 调度
PolarDB-X SQL限流 (二)
当前PolarDB-X正在全面对接阿里云 ''数据库自治服务 DAS",PolarDB-X限流能力将会以白屏化的方式提供给用户,经一步提升用户体验,降低使用门槛。
107 0
PolarDB-X SQL限流 (二)
|
5月前
|
SQL 弹性计算 测试技术
实践教程之如何在PolarDB-X中优化慢SQL
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您使用对 PolarDB-X 进行慢SQL优化。...
96 0
实践教程之如何在PolarDB-X中优化慢SQL
|
5月前
|
SQL 运维 数据库
PolarDB-X 限流慢SQL的方法
如果用户发现活跃连接数、cpu 使用率等指标处于高位, 同时慢SQL日志中发现大量记录, 分析得出是大量慢 SQL占用了数据库资源,而且这些慢SQL已经影响到整体核心业务的稳定运行,此时我们需要对其进行限流。
102 0
PolarDB-X 限流慢SQL的方法
|
23天前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。

相关产品

  • 云原生分布式数据库 PolarDB-X
  • 下一篇
    无影云桌面