在一个连接查询中有两类谓词:本地谓词和连接谓词。
只用于访问一张表的谓词就是本地谓词;定义了表和表之间连接关系的谓词称为连接谓词。连接谓词大部分都是基于主键=外键的。
表的连接有几种方式:循环嵌套连接、哈希连接、合并扫描连接。
循环嵌套连接:
首先在外层表中找到一行满足本地谓词的记录,然后再从内层表中查找与这行匹配的记录,并检查哪些符合内层表的本地谓词条件。
如果有合适的索引已经存在且结果集不是特别大,建议使用循环嵌套连接。
合并扫描连接:
执行表或索引的扫描以找出满足本地谓词的所有行;
随后可能会进行排序;
对前两步生成的临时表进行合并。
以下情况适用于合并扫描:
1、用于连接的字段上没有可用的索引
2、结果表很大
3、连接查询中不止一张表的本地谓词的多虑因子很低;
哈希连接:
哈希连接的本质是用哈希算法替代排序算法的合并扫描连接。首先,对较小的结果集使用哈希算法计算其连接字段,并将其保存在一个临时表中。然后再扫描其他表或索引,并通过哈希值将满足本地谓词条件的每一行记录与临时表中相应的行进行匹配。