更新时间:2024-11-12 GMT+08:00
指定是否使用minmax优化的hint
功能描述
指定语句是否使用minmax改写。
语法格式
[no] use_minmax[(@queryblock)]
参数说明
- no表示不使用minmax查询改写。
- @queryblock请参见指定Hint所处于的查询块Queryblock,可省略,表示在当前查询块生效。
- use_minmax使用minmax优化对语句进行查询改写。
示例
--准备 create table minmaxtest(f1 int); create index minmaxtesti on minmaxtest(f1); insert into minmaxtest values(11), (12); set explain_perf_mode=pretty; --打开explain pretty选项,可以看到更详尽计划 --常规场景 gaussdb=# explain (costs off) select min(f1), max(f1) from minmaxtest; id | operation ----+-------------------------------------------------------------------- 1 | -> Result 2 | -> Limit [1, InitPlan 1 (returns $0)] 3 | -> Index Only Scan using minmaxtesti on minmaxtest 4 | -> Limit [1, InitPlan 2 (returns $1)] 5 | -> Index Only Scan Backward using minmaxtesti on minmaxtest (5 rows) Predicate Information (identified by plan id) ---------------------------------------------------------------- 3 --Index Only Scan using minmaxtesti on minmaxtest Index Cond: (f1 IS NOT NULL) 5 --Index Only Scan Backward using minmaxtesti on minmaxtest Index Cond: (f1 IS NOT NULL) (4 rows) --使用hint不使用minmax改写 gaussdb=# explain (costs off)select /*+ no use_minmax*/ min(f1), max(f1) from minmaxtest; id | operation ----+------------------------------- 1 | -> Aggregate 2 | -> Seq Scan on minmaxtest (2 rows)
可以看到使用no use_minmax hint后SQL语句不再使用minmax优化。
--使用minmax hint analyze; --收集统计信息 gaussdb=# explain (costs off) select min(f1), max(f1) from minmaxtest; id | operation ----+------------------------------- 1 | -> Aggregate 2 | -> Seq Scan on minmaxtest (2 rows) --使用use_minmax hint 选择minmax改写 gaussdb=# explain (costs off) select /*+ indexonlyscan(minmaxtest) use_minmax*/ min(f1), max(f1) from minmaxtest; id | operation ----+-------------------------------------------------------------------- 1 | -> Result 2 | -> Limit [1, InitPlan 1 (returns $0)] 3 | -> Index Only Scan using minmaxtesti on minmaxtest 4 | -> Limit [1, InitPlan 2 (returns $1)] 5 | -> Index Only Scan Backward using minmaxtesti on minmaxtest (5 rows) Predicate Information (identified by plan id) ---------------------------------------------------------------- 3 --Index Only Scan using minmaxtesti on minmaxtest Index Cond: (f1 IS NOT NULL) 5 --Index Only Scan Backward using minmaxtesti on minmaxtest Index Cond: (f1 IS NOT NULL) (4 rows)
可以看到use_minmax hint成功生效。
use_minmax优化只有在表扫描使用indexscan的时候生效。
父主题: 使用Plan Hint进行调优