对JOIN的ON子句中的条件进行排序的方式是否重要?
select a.Name, b.Status from a inner join b on a.StatusID = b.ID
相对
select a.Name, b.Status from a inner join b on b.ID = a.StatusID
对性能有影响吗?如果我有多个条件怎么办?
一个命令比另一个命令更可维护吗?
JOIN可以通过将表以正确的顺序放在FROM子句中来强制执行顺序:
JOIN
FROM
STRAIGHT_JOIN
这将在使用索引b.id:
b.id
SELECT a.Name, b.Status FROM a STRAIGHT_JOIN b ON b.ID = a.StatusID
这将在使用索引a.StatusID:
a.StatusID
SELECT a.Name, b.Status FROM b STRAIGHT_JOIN a ON b.ID = a.StatusID
ORDERED
这将在上使用索引b.id或在上建立哈希表b:
b
SELECT /*+ ORDERED */ * FROM a JOIN b ON b.ID = a.StatusID
这将在上使用索引a.StatusID或在上建立哈希表a:
a
SELECT /*+ ORDERED */ * FROM b JOIN a ON b.ID = a.StatusID
FORCE ORDER
SELECT * FROM a JOIN b ON b.ID = a.StatusID OPTION (FORCE ORDER)
SELECT * FROM b JOIN a ON b.ID = a.StatusID OPTION (FORCE ORDER)
优化器提示(不需要) 优化器提示用于解决优化器中的问题。我们宁愿报告并解决问题。
优化器提示(不需要)
优化器提示用于解决优化器中的问题。我们宁愿报告并解决问题。
至于比较的顺序,在任何RDBMSAFAIK中都没有关系。
RDBMS
尽管我个人总是尝试估计要搜索的列,然后将此列放在左侧(因为它看起来像是lvalue)。
lvalue
有关更多详细信息,请参 见此答案 。