所有基于 SQL 的 RDBMS’(最多 10 年的版本):
直接连接查询(没有提示指令)中的表顺序对最佳性能和内存管理有影响吗?听说最后一个join应该是最大的表。您的数据库的查询优化器如何处理这种情况?
回答您的问题 - 是的,表格的顺序在连接中有所不同。
您还可以让优化器了解执行计划。
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) */