JOIN
可以通过将表以正确的顺序放在FROM
子句中来强制执行顺序:
这将在使用索引b.id
:
SELECT a.Name, b.Status
FROM a
STRAIGHT_JOIN
b
ON b.ID = a.StatusID
这将在使用索引a.StatusID
:
SELECT a.Name, b.Status
FROM b
STRAIGHT_JOIN
a
ON b.ID = a.StatusID
这将在上使用索引b.id
或在上建立哈希表b
:
SELECT /*+ ORDERED */
*
FROM a
JOIN b
ON b.ID = a.StatusID
这将在上使用索引a.StatusID
或在上建立哈希表a
:
SELECT /*+ ORDERED */
*
FROM b
JOIN a
ON b.ID = a.StatusID
这将在上使用索引b.id
或在上建立哈希表b
:
SELECT *
FROM a
JOIN b
ON b.ID = a.StatusID
OPTION (FORCE ORDER)
这将在上使用索引a.StatusID
或在上建立哈希表a
:
SELECT *
FROM b
JOIN a
ON b.ID = a.StatusID
OPTION (FORCE ORDER)
至于比较的顺序,在任何RDBMS
AFAIK中都没有关系。
尽管我个人总是尝试估计要搜索的列,然后将此列放在左侧(因为它看起来像是lvalue
)。