星型连接伪指令

使用星型连接伪指令指定优化程序应连接具有星型模式的表的方式。

星型连接伪指令
表引用
元素 描述 限制 语法
alias FROM 子句中声明的临时的可代替的表名 如果声明了 alias ,那么它必须被使用(而不是使用 tablesynonym 标识符
comments 用于记录伪指令的可选文本 必须在括号外但是注释符号内 字符串
synonym, table 要应用伪指令的表的名称或同义词 它指向的表和同义词必须存在 标识符

在指定多个表的 AVOID_FACT 伪指令中,使用逗号或空格分隔括号内的元素。

下表描述了每种星连接伪指令并说明了它是如何影响优化程序的查询计划。
关键字 作用 优化程序操作
AVOID_FACT 必须指定至少一个表。不使用将表(或表列表中的任何表)作为星连接优化程序中的事实表 优化程序不考虑将指定的表(或表列表中的任何表)视为事实表的星型连接执行计划。
AVOID_STAR_JOIN 优化程序不会考虑星连接执行计划。 优化程序选择一个不是星型连接计划的查询执行计划。
FACT 必须指定正确的一个表。只能将指定的表视为星型连接执行计划中的事实表 这些优化程序考虑查询计划,其中指定的表是星型连接执行计划中的事实表。
STAR_JOIN 如果可能,优先选择星型连接计划。 如果可能,优化程序优先选择星型连接计划。

星型连接伪指令要求启用并行数据库查询功能(PDQ)。当 PDQ 关闭时,禁用星型连接查询优化程序。

星型连接伪指令要求查询中的所有表具有至少低级别的统计。如果查询中的任何表的表统计信息不可用,则禁用星型连接优化程序

SQL 的 SET OPTIMIZATION ENVIRONMENT STAR_JOIN DISABLED 语句会禁用当前会话中的星型连接伪指令。(有关优化程序环境设置的其它信息,请参阅 ENVIRONMENT 选项。)

单独指定 FACT 伪指令不会自动支持星型连接执行计划。您可以通过指定 STAR_JOIN 伪指令和 FACT 伪指令的组合来指示优化程序更喜欢使用特定事实表的星型连接执行计划。

您可以在 SET EXPLAIN 语句的输出文件中查看一个查询的星型连接优化程序路径,也可以使用 GBase Data Studio 获得 Visual Explain 输出。

在集群环境中,星型查询优化程序伪指令在这些类型的辅助服务器上可用:
  • 共享磁盘辅助服务器(SDS)
  • 远程独立辅助服务器(RSS)
  • 高可用数据复制辅助服务器(HDR)。

星型伪指令的限制

下列限制适用于尝试连接具有星型模式依赖关系的表的查询:
  • 必须启用并行数据库查询(PQD)功能才能使星型连接指令有效。
  • 查询中的所有表必须至少具有低级别统计信息。
  • 星型连接伪指令不支持连接多个事实表。
  • 当事务隔离级别为 Committed Read Last Committed 或 Cursor Stability 时,星型连接伪指令无效。(支持所有其它事务隔离级别。)