NESTED LOOPS
如果循环内的条件是可 保留的 ,则 很好 ,即可以使用index来限制记录数。
对于这样的查询:
SELECT *
FROM a
JOIN b
ON b.b1 = a.a1
WHERE a.a2 = @myvar
,a
带头,a
将记录from中的每条记录,并b
应找到in中的所有相应记录。
如果b.b1
被索引并且具有高基数,那么NESTED LOOP
将是一种首选方式。
在中sql Server
,这也是执行非等值联接的唯一方法(子句中的=
条件ON
除外)
HASH JOIN
如果应该解析所有(或几乎所有)记录,则这是最快的方法。
它从中获取所有记录b
,在其上构建一个哈希表,然后从中获取所有记录,a
并使用join列的值作为键来查找哈希表。
Na * (Nb / C) * R
,
其中,Na
和Nb
是记录的数量a
和b
,C
是该指数的基数,而R
对于行查找需要一定的时间(1
在所有领域SELECT
,WHERE
并ORDER BY
分句由索引覆盖,大约10
如果他们不)
Na + (Nb * H)
,其中H
是构建和查找哈希表(每个记录)所需的常数的总和。它们被编程到引擎中。