连接顺序伪指令

使用 ORDERED 连接顺序伪指令强制优化程序以它们在查询的 FROM 子句中出现的顺序连接表或视图。

连接顺序伪指令
元素 描述 限制 语法
comments 用于记录伪指令的文本 必须出现在注释符号之间 字符串
例如,下面的查询强制数据库服务器连接表 deptjob ,然后表结果和表 emp 连接起来:
SELECT --+ ORDERED
          name, title, salary, dname
          FROM dept, job, emp WHERE title = 'clerk' AND loc = 'Palo Alto' 
          AND emp.dno = dept.dno 
          AND emp.job= job.job;

因为在表 dept 和表 job 之间没有出现谓词,所以这个查询强制数据库服务器构造一个笛卡尔积。

当查询涉及视图时,ORDERED 连接顺序伪指令的位置决定所指定的是部分还是完全连接顺序。
  • 创建视图时指定部分连接顺序

    如果在创建视图时使用 ORDERED 伪指令,基表就以视图定义的顺序相邻连接。

    对于后面所有关于视图的查询,数据库服务器以视图定义中指定顺序相邻地连接基表。当使用在视图中时,ORDERED 伪指令不影响查询中的 FROM 子句命名的其它表的连接顺序。

  • 创建视图时指定完全连接顺序

    当在使用视图的查询中指定 ORDERED 连接顺序伪指令时,所有表都以指定顺序连接,即使 是组成视图的那些表。如果视图包含在查询中,基表就以视图定义的顺序相邻地连接。ORDERED 用于示例的例子,可以参考 GBase 8s 性能指南

因为 OUTER 连接的顺序要求,在符合 ANSI 的连接查询中,指定 RIGHT OUTER JOIN 或 FULL OUTER JOIN 关键字,忽略 ORDERED 连接顺序伪指令,但它在解释输出文件中的 Directives Not Followed 下列出。