Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 查询处理 » 查询优化与执行 » [查询执行] 算法 » 算法类型 » 连接算法

 

NestedLoopsJoin 算法(JNL、JNLFO、JNLO)

NestedLoopsJoin 通过为左侧的每行完全读取右侧的内容来计算左右两侧的连接。(由于优化程序将为请求中的每个块选择正确的连接顺序,因此表在查询中的语法顺序无关紧要。)

如果连接条件不包含相等条件或要使用第一行优化目标对语句进行优化(即,optimization_goal 选项设置为 First-Row,或在 FROM 子句中将 FASTFIRSTROW 指定为表提示),则优化程序可能会选择 NestedLoopsJoin。

由于 NestedLoopsJoin 会多次读取右侧,因此它对右侧的开销非常敏感。如果右侧是索引扫描或小表,则可以使用先前迭代中的高速缓存页计算右侧。但是,如果右侧是顺序表扫描或是匹配许多行的索引扫描,则需要从磁盘中多次读取右侧。通常,NestedLoopsJoin 的效率比其它连接方法的效率低。但是,与必须在返回之前计算整个结果的连接方法相比,NestedLoopsJoin 可以快速地返回第一个匹配行。

NestedLoopsJoin 是唯一可以为包含连接的查询提供敏感语义的连接算法。这意味着连接上的敏感游标只能用 NestedLoopsJoin 来执行。

另请参见