admin

没有提示指令的直接连接中的表顺序是否会影响性能?

sql

所有基于 SQL 的 RDBMS’(最多 10 年的版本):

直接连接查询(没有提示指令)中的表顺序对最佳性能和内存管理有影响吗?听说最后一个join应该是最大的表。您的数据库的查询优化器如何处理这种情况?


阅读 166

收藏
2021-07-01

共1个答案

admin

回答您的问题 - 是的,表格的顺序在连接中有所不同。

您还可以让优化器了解执行计划。

ORDERED 提示使 Oracle 按照它们在 FROM 子句中出现的顺序连接表。

例如,此语句将表 TAB1 连接到表 TAB2,然后将结果连接到表 TAB3:

 SELECT /*+ ORDERED */ TAB1.COL1, TAB2.COL2, TAB3.COL3
     FROM TAB1, TAB2, TAB3
    WHERE TAB1.COL1 = TAB2.COL1
         AND TAB2.COL1 = TAB3.COL1;

如果在执行连接的 SQL 语句中省略 ORDERED 提示,优化器将选择连接表的顺序。如果您知道从优化器不知道的每个表中选择的行数,您可能希望使用 ORDERED 提示来指定连接顺序。这些信息将允许您比优化器更好地选择内部表和外部表。

通常,如果您分析表,优化器会选择一个有效的星型计划。您还可以使用提示来改进计划。最精确的方法是按照索引中键的顺序对 FROM 子句中的表进行排序,大表放在最后。然后使用以下提示:

/*+ ORDERED USE_NL(FACTS) INDEX(FACTS FACT_CONCAT) */
2021-07-01