所有基于 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) */
关于mysql - 没有提示指令的直接连接中表的顺序是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407605/