VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

Scan方式的Hint

功能描述

指明scan使用的方法,可以是tablescan、indexscan和indexonlyscan。

语法格式

[no] tablescan|indexscan|indexonlyscan(table [index])

参数说明

  • no

    表示不使用hint的scan方式。

  • tablescan|indexscan|indexonlyscan

    指明scan使用的方法,三选一。

    • tablescan

      表示进行表扫描。

    • indexscan

      表示进行索引扫描。

    • indexonlyscan

      表示只进行索引扫描。

    对于indexscan或indexonlyscan,只有hint的索引属于hint的表时,才能使用该hint。

  • table

    表示hint指定的表,只能指定一个表,如果表存在别名应优先使用别名进行hint。

  • index

    表示使用indexscan或indexonlyscan的hint时,指定的索引名称,当前只能指定一个。

    scan hint支持在行列存表、obs表、子查询表上指定。

示例

建表语句请参考Plan-Hint调优概述的示例

为了hint使用索引扫描,需要首先在表item的i_item_sk列上创建索引,名称为i。

create index i on item(i_item_sk);

Plan Hint调优示例中原语句使用如下hint:

explain
select /*+ indexscan(item i) */ 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
;

该hint表示:item表使用索引i进行扫描。生成计划如下所示: