1.1.1 子查询合并
子查询合并(Subquery
Coalescing)的目的是将等价的半连接以及反连接子查询组合到同一个查询块中。应用这种自11.2版本起可用的基于启发式的查询变换,其主要目的是减少表访问的数量,从而减少连接的数量。
下面的例子来自subquery_coalescing.sql脚本,演示了这种查询转换是如何工作的。注意,两个相互关联的子查询处理相同的数据,只是限制条件有所区别:
SELECT *
FROM t1
WHERE EXISTS(SELECT 1 FROM t2 WHERE t2.id =
t1.id AND t2.n>10)
OR
EXISTS(SELECT 1 FROM t2 WHERE t2.id = t1.id AND t2.n10 OR t2.n 10 OR
t2.n1.1.1 使用窗口函数移除子查询