15.查询优化和子查询半查询(gold_axe)

类型按结果划分:

根据与外层的关系:

SELECT * FROM s 1 WHERE key 1 IN(SELECT common _ field FROM S2 WHERE key 3 = ' a ');

SELECT * FROM s 1 WHERE key 1

从s2中选择common_field,其中key3 = 'a '

这两个表是S1S2,是不相关的查询。

内层查询的结果集太多,可能内存放不下,in(太多)效率太低。

所以内层查询的结果会被放入临时表中,这个过程会不断重复(瘦身),这就是所谓的物化。

选择s1。* FROM s 1 SEMI JOIN S2 ON s 1 . key 1 = S2 . common _ field其中key3 = ' a

这个声明不能执行,只是一个标志。

半连接:只关心s2表中是否有匹配的记录,不关心有多少条记录匹配。

如何通过执行半连接来消除重复值:

如果IN子查询不满足转换为半连接的条件,并且不能转换为物化表或者转换为物化表的代价太高,那么它将被转换为EXISTS查询。