转载自:https://www.cnblogs.com/kerrycode/p/5935704.htmlhtml
此外须要理解:优化
1 什么是半链接?spa
semi join,半链接操做,是关系代数规定的扩展操做符之一。对于“R semi-join S”其语义为:链接后的结果中,只包括R与S在公共属性上的交集所限定的R中的部分元组。code
anti join,反半链接,语义与半链接相反。即“R semi-join S”至关于“S anti-join R”。htm
2 为何要用半链接优化子查询?blog
对于子查询,其子查询部分相对于父表的每一个符合条件的元组,都要把子查询执行一轮。效率低下。用半链接操做优化子查询,是把子查询上拉到父查询中,这样子查询的表和父查询中的表是并列关系,父表的每一个符合条件的元组,只须要在子表中找符合条件的元组便可,不须要“父表的每一个符合条件的元组,都要把子查询执行一轮”,因此效率提升。索引
这种优化方式,称为“上拉/扁平化”。效率
3. 半链接操做对于表达“半”含义的表,具备“存在便可”的含义,若是有多个元组符合链接条件,则不能让每一个符合条件的元组都与外表进行链接,因此,对于半链接的表即一个内表来讲,就须要把知足条件的重复元组去掉或使用索引等方式进行“只选择一个”式的操做。扩展