【发布时间】:2020-04-28 17:43:33
【问题描述】:
很久以前,我曾在 SQL 课程中被告知,查询的 FROM 子句中的 JOIN 顺序会影响查询的性能。因此,例如,如果我有以下内容
SELECT * FROM
TABLE_1 INNER JOIN --5000 rows
TABLE_2 ON TABLE_1.COL1=TABLE_2.COL1 INNER JOIN --200 rows
TABLE_3 ON TABLE_2.COL1=TABLE_3.COL1--50 rows
.....
这应该重新排序为以下
SELECT * FROM
TABLE_3 INNER JOIN --50 rows
TABLE_2 ON TABLE_2.COL1=TABLE_3.COL1 INNER JOIN --200 rows
TABLE_1 ON TABLE_1.COL1=TABLE_2.COL1 --5000 rows
.....
因此,前导/驱动表首先是行数最少的(假设)。我已经读过,除非使用 HINT 来强制执行订单,否则 Oracle 中基于成本的优化器只会按照它认为合适的方式重新安排 JOIN。
只是好奇,在 SQL 语句中不使用 HINTS 的 JOIN 顺序是否重要?
【问题讨论】:
标签: oracle performance optimization sql-tuning