更新时间:2024-10-14 GMT+08:00
Plan Hint调优概述
Plan Hint为用户提供了直接影响执行计划生成的手段,用户可以通过指定join顺序,join、stream、scan方法,指定结果行数,指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优,以提升查询的性能。
功能描述
Plan Hint支持在SELECT、INSERT、UPDATE、DELETE、MERGE等关键字后通过如下形式指定:
1
|
/*+ <plan hint>*/
|
可以同时指定多个hint,之间使用空格分隔。hint只能hint当前层的计划,对于子查询计划的hint,需要在子查询的select关键字后指定hint。
例如:
1
|
select /*+ <plan_hint1> <plan_hint2> */ * from t1, (select /*+ <plan_hint3> */ * from t2) where 1=1; |
其中<plan_hint1>,<plan_hint2>为外层查询的hint,<plan_hint3>为内层子查询的hint。
如果在视图定义(CREATE VIEW)时指定hint,则在该视图每次被应用时会使用该hint。
当使用random plan功能(参数plan_mode_seed不为0)时,查询指定的plan hint不会被使用。
支持范围
当前版本Plan Hint支持的范围如下,后续版本会进行增强。
- 指定Join顺序的Hint - leading hint
- 指定Join方式的Hint,仅支持除semi/anti join,unique plan之外的常用hint。
- 指定结果集行数的Hint
- 指定Stream方式的Hint
- 指定Scan方式的Hint,仅支持常用的tablescan,indexscan和indexonlyscan的hint。
- 指定子链接块名的Hint
- 指定倾斜信息的Hint,仅支持Join与HashAgg的重分布过程倾斜。
- 指定本query内生效的guc参数的Hint(在视图内使用不生效)。
- 指定使用custom plan或generic plan的Hint(只对PBE执行的查询语句生效)。
- 指定子查询不展开的Hint。
- 指定当前查询语句不进入全局计划缓存(enable_global_plancache打开且当前语句为PBE执行时生效)。
注意事项
- 不支持Agg、Sort、Setop和Subplan的hint。
- 不支持SMP和Node Group场景下的Hint。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
explain select i_product_name product_name ,i_item_sk item_sk ,s_store_name store_name ,s_zip store_zip ,ad2.ca_street_number c_street_number ,ad2.ca_street_name c_street_name ,ad2.ca_city c_city ,ad2.ca_zip c_zip ,count(*) cnt ,sum(ss_wholesale_cost) s1 ,sum(ss_list_price) s2 ,sum(ss_coupon_amt) s3 FROM store_sales ,store_returns ,store ,customer ,promotion ,customer_address ad2 ,item WHERE ss_store_sk = s_store_sk AND ss_customer_sk = c_customer_sk AND ss_item_sk = i_item_sk and ss_item_sk = sr_item_sk and ss_ticket_number = sr_ticket_number and c_current_addr_sk = ad2.ca_address_sk and ss_promo_sk = p_promo_sk and i_color in ('maroon','burnished','dim','steel','navajo','chocolate') and i_current_price between 35 and 35 + 10 and i_current_price between 35 + 1 and 35 + 15 group by i_product_name ,i_item_sk ,s_store_name ,s_zip ,ad2.ca_street_number ,ad2.ca_street_name ,ad2.ca_city ,ad2.ca_zip ; |
父主题: 使用Plan Hint进行调优