PolarDB-X 1.0-用户指南-自定义HINT-指定分库执行 SQL

简介: 在使用PolarDB-X的过程中,如果遇到某个PolarDB-X不支持的 SQL 语句,可以通过PolarDB-X提供的NODE HINT,直接将 SQL 下发到一个或多个分库上去执行。此外如果需要单独查询某个分库或者已知分库的某个分表中的数据,也可以使用NODE HINT,直接将 SQL 语句下发到分库中执行。

在使用PolarDB-X的过程中,如果遇到某个PolarDB-X不支持的 SQL 语句,可以通过PolarDB-X提供的NODE HINT,直接将 SQL 下发到一个或多个分库上去执行。此外如果需要单独查询某个分库或者已知分库的某个分表中的数据,也可以使用NODE HINT,直接将 SQL 语句下发到分库中执行。

本文适用于PolarDB-X 5.3 及以上版本,其他版本请参见PolarDB-X 5.2指定分库执行SQL 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官方客户端命令。
  • 从版本 5.4.1 开始,PolarDB-X在拆分表的物理表名中增加了4个字符的随机串,请务必使用 SHOW TOPOLOGY 命令获取逻辑表拓扑和实际的物理表名。
  • 从版本 5.4.4 开始,PolarDB-X提供开关来控制拆分表的物理表名中是否包含随机串,默认为开启,可以在控制台“参数设置”的数据库级别参数中,将“是否启用随机物理表名 ENABLE_RANDOM_PHY_TABLE_NAME”改为 false 来关闭,也可以用 HINT 来实现语句级别的控制:/*+TDDL:cmd_extra(ENABLE_RANDOM_PHY_TABLE_NAME=FALSE)*/
  • 如果在目标表包含 Sequence 的 INSERT 语句上使用了指定分库的 HINT,那么 Sequence 将不生效。更多相关信息,请参见Sequence限制及注意事项。

语法

NODE HINT支持通过分片名指定 SQL 在分库上执行。其中分片名是PolarDB-X中分库的唯一标识,可以通过 SHOW NODE 语句得到。

通过分库名指定 SQL 在分库上执行分两种使用方式,分别是指定 SQL 在某个分库上执行和指定 SQL 在多个分库上执行。

  • 指定 SQL 在某个分库上执行:
  1. /*+TDDL:node('node_name')*/
  • node_name 为分片名,通过这个PolarDB-X自定义 HINT,就可以将 SQL 下发到node_name对应的分库中执行。
  • 指定 SQL 在多个分库上执行:
  1. /*+TDDL:node('node_name'[,'node_name1','node_name2'])*/
  • 在参数中指定多个分片名,将 SQL 下发到多个分库上执行,分片名之间使用逗号分隔。
  • 使用该自定义 HINT 时,PolarDB-X会将 SQL 直接下发到分库上执行,所以在 SQL 语句中,表名必须是该分库中已经存在的表名。
  • NODE HINT支持 DML、DDL、DAL 语句。

示例

对于名为 drds_test 的PolarDB-X数据库,SHOW NODE 的结果如下:


  1. mysql> SHOW NODE\G
  2. ***************************1. row ******************
  3.                 ID:0
  4.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS
  5.  MASTER_READ_COUNT:212
  6.   SLAVE_READ_COUNT:0
  7. MASTER_READ_PERCENT:100%
  8. SLAVE_READ_PERCENT:0%
  9. ***************************2. row ******************
  10.                 ID:1
  11.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0001_RDS
  12.  MASTER_READ_COUNT:29
  13.   SLAVE_READ_COUNT:0
  14. MASTER_READ_PERCENT:100%
  15. SLAVE_READ_PERCENT:0%
  16. ***************************3. row ******************
  17.                 ID:2
  18.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0002_RDS
  19.  MASTER_READ_COUNT:29
  20.   SLAVE_READ_COUNT:0
  21. MASTER_READ_PERCENT:100%
  22. SLAVE_READ_PERCENT:0%
  23. ***************************4. row ******************
  24.                 ID:3
  25.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS
  26.  MASTER_READ_COUNT:29
  27.   SLAVE_READ_COUNT:0
  28. MASTER_READ_PERCENT:100%
  29. SLAVE_READ_PERCENT:0%
  30. ***************************5. row ******************
  31.                 ID:4
  32.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0004_RDS
  33.  MASTER_READ_COUNT:29
  34.   SLAVE_READ_COUNT:0
  35. MASTER_READ_PERCENT:100%
  36. SLAVE_READ_PERCENT:0%
  37. ***************************6. row ******************
  38.                 ID:5
  39.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0005_RDS
  40.  MASTER_READ_COUNT:29
  41.   SLAVE_READ_COUNT:0
  42. MASTER_READ_PERCENT:100%
  43. SLAVE_READ_PERCENT:0%
  44. ***************************7. row ******************
  45.                 ID:6
  46.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS
  47.  MASTER_READ_COUNT:29
  48.   SLAVE_READ_COUNT:0
  49. MASTER_READ_PERCENT:100%
  50. SLAVE_READ_PERCENT:0%
  51. ***************************8. row ******************
  52.                 ID:7
  53.               NAME: DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0007_RDS
  54.  MASTER_READ_COUNT:29
  55.   SLAVE_READ_COUNT:0
  56. MASTER_READ_PERCENT:100%
  57. SLAVE_READ_PERCENT:0%
  58. 8 rows inset(0.02 sec)

可以看到每个分库都有 NAME 这个属性,这就是分库的分片名。每个分片名都唯一对应一个分库名,比如DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0003_RDS这个分片名对应的分库名是drds_test_vtla_0003。得到了分片名,就可以使用PolarDB-X的自定义 HINT 指定分库执行 SQL 语句了。

  • 指定 SQL 在第 0 个分库上执行:
  1. SELECT /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS')*/* FROM table_name;
  • 指定 SQL 在多个分库上执行:
  1. SELECT /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS','DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS')*/* FROM table_name;
  • 这条 SQL 语句将在DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS,DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0006_RDS这两个分片上执行。
  • 查看 SQL 在第 0 个分库上物理执行计划:
  1. /*TDDL:node('DRDS_TEST_1473471355140LRPRDRDS_TEST_VTLA_0000_RDS')*/ EXPLAIN SELECT * FROM table_name;
相关文章
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading
【YashanDB 知识库】使用 leading hint 调整 SQL 执行计划后报错 YAS-04522 invalid hint leading
在 YashanDB 的所有版本中,使用 leading hint 调整 SQL 执行计划时可能出现“YAS-04522 invalid hint leading”错误,导致 SQL 无法正常执行。原因是 YashanDB 优化器的 Bug。解决方法为避免使用 leading hint。可通过创建测试表 a、b、c 并执行特定 SQL 语句来验证问题是否存在。
|
SQL 数据库 开发者
ClkLog埋点分析系统支持自定义SQL 查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
ClkLog埋点分析系统支持自定义SQL 查询
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
前端开发 开发者
Vaadin Grid的秘密武器:打造超凡脱俗的数据展示体验!
【8月更文挑战第31天】赵萌是一位热爱UI设计的前端开发工程师。在公司内部项目中,她面临大量用户数据展示的挑战,并选择了功能强大的Vaadin Grid来解决。她在技术博客上分享了这一过程,介绍了Vaadin Grid的基本概念及其丰富的内置功能。通过自定义列和模板,赵萌展示了如何实现复杂的数据展示。
388 0
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
1089 0
|
SQL 存储 流计算
Flink SQL 在快手实践问题之表示 Mini-Batch hint如何解决
Flink SQL 在快手实践问题之表示 Mini-Batch hint如何解决
280 0
|
SQL 存储 监控
PolarDB-X 1.0-用户指南-SQL审计与分析-简介
分布式关系型数据库PolarDB-X与日志服务联合推出SQL审计与分析功能,不仅支持历史SQL记录的审计,而且提供对SQL执行状况、性能指标、安全问题的实时诊断分析能力。 您可以在PolarDB-X控制台,开通SQL审计与分析功能,进行实时日志分析。同时,PolarDB-X依托日志服务,提供开箱即用的报表中心,使您对数据库执行状况、性能、潜在安全问题了如指掌。
505 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)")

热门文章

最新文章

相关产品

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