hint
hint关键字 | 描述 |
---|---|
materialize | 强制将 with as 中的子查询结果集转换为临时表 |
inline | 强制不将 with as 中的子查询结果集转换为临时表 |
应用场景
用 with as 将一个子查询独立出来:一般来说,如果这个子查询定义的表名被调用2次及2次以上,那么CBO就会把这个子查询返回的数据放入临时表(对应执行计划中的 SYS_TEMP_XXX);如果只被调用1次,则不会。
一般情况下,如果在 with as 中的子查询返回结果集很大,且调用该子查询不走索引时,加 materialize 能极大提升整体性能;如果在 with as 中的子查询返回结果集很小,且调用该子查询能走索引时,加 materialize 反而会降低整体性能,这种情况下,为稳定性能,可使用 inline 抑制其转换为临时表。