发布时间:2025-04-25 21:54:50 点击量:
HASH GAME - Online Skill Game GET 300
嵌套循环联接也称为嵌套迭代,它将一个联接输入用作外部输入表(显示为图形执行计划中的顶端输入),将另一个联接输入用作内部(底端)输入表。外部循环逐行消耗外部输入表。内部循环为每个外部行执行,在内部输入表中搜索匹配行。最简单的情况是,搜索时扫描整个表或索引;这称为单纯嵌套循环联接。如果搜索时使用索引,则称为索引嵌套循环联接。如果将索引生成为查询计划的一部分(并在查询完成后立即将索引破坏),则称为临时索引嵌套循环联接。查询优化器考虑所有这些不同形式。如果外部输入很小而内部输入很大且预先创建了索引,则嵌套循环联接尤其有效。在许多小事务中(如那些只影响较小的一组行的事务),索引嵌套循环联接远比合并联接和哈希联接优越。但在大查询中,嵌套循环联接通常不是最佳选择。
与合并联接相似,只有当联接谓词中至少有一个等效(WHERE)子句时才能使用哈希联接。然而,联接一般用于重组合由主键和外键之间的等效谓词表达的关系,因此大多数联接至少有一个等效子句。用等效谓词表达的列集合称为哈希键,因为这些列有助于哈希函数。还可以有附加的谓词,并且可以将这些谓词取值为驻留谓词以与哈希值比较分开。哈希键可以是表达式,只要能从单个行中的列对其进行排它计算。在分组操作中,按列表分组的列是哈希键。在交集等集合操作中以及删除复制项时,哈希键由所有列组成。
在执行图一中后两个SQL语句前,必须打开“显示执行计划”开关,按CTRLK组合键,按F5执行后,返回同样的记录,查询成本却相去甚远,为什么呢?使用EXISTS的查询在执行计划中使用了NESTED LOOPS与LEFT SEMI JOIN等运算符;而使用IN的查询在执行中使用了HASH MATCH与RIGHT SEMI JOIN运算符。在SQLSERVER的联机帮助中,输入NESTED LOOP等可以看到它们的说明。