华为云云数据库GaussDBPlan Hint调优概述_云淘科技

Plan Hint为用户提供了直接影响执行计划生成的手段,用户可以通过指定join顺序,join、stream、scan方法,指定结果行数,指定重分布过程中的倾斜信息等多个手段来进行执行计划的调优,以提升查询的性能。

功能描述

Plan Hint仅支持在SELECT关键字后通过如下形式指定:

/*+ */

可以同时指定多个hint,之间使用空格分隔。hint只能hint当前层的计划,对于子查询计划的hint,需要在子查询的select关键字后指定hint。

例如:

select /*+   */ * from t1, (select /*+  */ from t2) where 1=1;

其中,为外层查询的hint,为内层子查询的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的重分布过程倾斜。

注意事项

不支持Agg、Sort、Setop和Subplan的hint。
不支持SMP和Node Group场景下的Hint。

示例

本章节使用同一个语句进行示例,便于Plan Hint支持的各方法作对比,示例语句及不带hint的原计划如下所示:

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进行调优

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家