PolarDB-X 1.0-用户指南-自定义HINT-扫描全部或部分分库分表

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 除了可以将SQL单独下发到一个或多个分库执行,POlarDB-X还提供了扫描全部/部分分库与分表的SCAN HINT。使用SCAN HINT,您可以一次将SQL下发到每一个分库执行, 比如查看某个分库上的所有分表,或者查看某个逻辑表的每张物理表中的数据量等。

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

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

  • 在所有分库的所有分表上执行。
  • 在指定分库的所有分表上执行。
  • 在指定分库分表上执行,根据条件计算物理表名称。
  • 在指定分库分表上执行,显式指定物理表名。

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

本文适用于PolarDB-X 5.3及以上版本,其他版本请参见PolarDB-X 5.2扫描全部分库分表 HINT文档

注意事项

  • 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

从5.4.1版本开始,POlarDB-X在拆分表的物理表名中增加了4个字符的随机串,请务必使用SHOW TOPOLOGY命令获取逻辑表拓扑和实际的物理表名。

示例

  • 在所有分库的所有分表上执行
  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_00t1_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分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
1月前
|
SQL 存储 关系型数据库
PolarDB产品使用合集之有的sql里面有自定义存储函数 如果想走列存有什么优化建议吗
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
297 0
|
2月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库PolarDB自定义权限策略参考
本文介绍了自定义权限策略,它是RAM访问控制体系中除系统策略外,用户可创建、更新和删除的权限策略。用户需维护策略版本更新,并将策略绑定到RAM身份以授予权限。策略支持版本控制和删除,但删除前需确保无引用。文章提供了相关操作文档链接,包括创建、修改、删除策略及管理引用记录和版本。此外,列举了PolarDB在MySQL、PostgreSQL和XScale版的自定义权限策略场景和示例,并提示用户在使用时需了解授权信息。
38 0
|
2月前
|
SQL 关系型数据库 分布式数据库
PolarDB常见问题之tbl_order_link_imei的扫描行不是1如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
存储 并行计算 Cloud Native
PolarDB 开源版通过pg_rational插件支持Stern-Brocot trees , 实现高效自定义顺序和调整顺序需求
PolarDB 的云原生存算分离架构, 具备低廉的数据存储、高效扩展弹性、高速多机并行计算能力、高速数据搜索和处理; PolarDB与计算算法结合, 将实现双剑合璧, 推动业务数据的价值产出, 将数据变成生产力. 本文将介绍PolarDB 开源版通过pg_rational插件支持Stern-Brocot trees , 实现高效自定义顺序和调整顺序需求.
168 0
|
SQL 机器学习/深度学习 运维
【笔记】用户指南—备份与恢复—将PolarDB-X与其他阿里云服务集成
阿里云提供众多与数据相关的产品和服务,PolarDB-X作为一款云原生分布式数据库产品,同时也是阿里云生态的重要组成部分。PolarDB-X通过打通与其他云产品的连接,提供了更加原生的生态互通能力,为更多的业务场景提供了便利。
108 0
|
SQL 机器学习/深度学习 运维
【笔记】用户指南—备份与恢复—将PolarDB-X与其他阿里云服务集成
阿里云提供众多与数据相关的产品和服务,PolarDB-X作为一款云原生分布式数据库产品,同时也是阿里云生态的重要组成部分。PolarDB-X通过打通与其他云产品的连接,提供了更加原生的生态互通能力,为更多的业务场景提供了便利。
|
SQL 机器学习/深度学习 运维
【笔记】用户指南—备份与恢复—将PolarDB-X与其他阿里云服务集成
阿里云提供众多与数据相关的产品和服务,PolarDB-X作为一款云原生分布式数据库产品,同时也是阿里云生态的重要组成部分。PolarDB-X通过打通与其他云产品的连接,提供了更加原生的生态互通能力,为更多的业务场景提供了便利。
|
SQL 机器学习/深度学习 运维
用户指南—备份与恢复—将PolarDB-X与其他阿里云服务集成
阿里云提供众多与数据相关的产品和服务,PolarDB-X作为一款云原生分布式数据库产品,同时也是阿里云生态的重要组成部分。PolarDB-X通过打通与其他云产品的连接,提供了更加原生的生态互通能力,为更多的业务场景提供了便利。
111 0
|
SQL 机器学习/深度学习 运维
用户指南—备份与恢复—将PolarDB-X与其他阿里云服务集成
阿里云提供众多与数据相关的产品和服务,PolarDB-X作为一款云原生分布式数据库产品,同时也是阿里云生态的重要组成部分。PolarDB-X通过打通与其他云产品的连接,提供了更加原生的生态互通能力,为更多的业务场景提供了便利。
|
19天前
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。

热门文章

最新文章

相关产品

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