「All things being equal RBO chooses the driving order by taking the tables in the FROM clause RIGHT to LEFT.」
—— Oracle 官方文档
笔者多次实测未能复现该规则,推测 RBO 内部仍存在隐含评分机制 (索引存在性、WHERE 条件过滤力等),并非单纯按 FROM 顺序倒序。
CREATE TABLE A (COL1 NUMBER(4), COL2 NUMBER(4), COL4 CHAR(30));
CREATE TABLE B (COL1 NUMBER(4), COL3 NUMBER(4), NAME_B CHAR(30));
CREATE TABLE C (COL2 NUMBER(4), COL3 NUMBER(4), NAME_C CHAR(30));
CREATE INDEX INX_COL12A ON A(COL1, COL2);
SELECT A.COL4
FROM B, A, C
WHERE B.COL3 = 10
AND A.COL1 = B.COL1
AND A.COL2 = C.COL2
AND C.COL3 = 5;
B.COL3 = 10 高选择性过滤)。OPTIMIZER_MODE=ALL_ROWS 或 FIRST_ROWS_n)。EXPLAIN PLAN + DBMS_XPLAN.DISPLAY 验证每一条规则。一句话:文档是地图,实测是领土;优化器进化极快,唯有持续实验才能建立可靠心智模型。