gbase数据、南大通用产品文档:GBase8aIN 改写为EXISTS(NOT IN => NOT EXISTS)
更新日期:2024年09月11日
GCluster 8a MPP Cluster 自动将所有带IN (subquery)的语句都被优化成了EXISTS (rewrited-subquery)的语句,从而提高性能。 1. 优化特性: IN 转成EXISTS:对单列及多列的IN 子查询语句均可转换成EXISTS。 示例: 原语句: SELECT s1, s2 FROM t1 WHERE s2 IN (SELECT s1 FROM t1); 优化后: (t1.s2,(select 1 AS Not_used FROM t1 WHERE ((t1.s2) = t1.s1) NOT IN 转成NOT EXISTS:与IN 转EXISTS 同理。 2. 优化限制: IN 子查询中带LIMIT/UNION(…)/OLAP/GROUP 的语句不能优化; 支持多列In 子查询的语句,如果有非列名,如(a, 10) IN (SELECT a, 10 …) 则不能优化。 3. 优化参数: _gbase_optimizer_in_subselect 控制是否使用优化,默认为开启。