
# Scan方式的Hint
#### 功能描述
指明scan使用的方法，可以是tablescan、indexscan和indexonlyscan。
#### 语法格式
```
[no] tablescan|indexscan|indexonlyscan([@block_name] table [index])
```
#### 参数说明
- **no**表示hint的scan方式不使用。
- **block_name** 表示语句块的block_name，详细说明请参考[block_name](https://support.huaweicloud.com/devg-dws/dws_04_0456.html#ZH-CN_TOPIC_0000002080515442__zh-cn_topic_0000001460722632_li99021444551)。
- **table** 表示hint指定的表，只能指定一个表，如果表存在别名应优先使用别名进行hint。
  ![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
  表的语法格式如下：
  ```
  [schema.]table[@block_name]
  ```
  表名可以带schema，也可以带所在子查询语句块提升前的block_name。
  子查询语句块在优化器进行优化重写时发生提升，则该block_name会与leading中block_name不同。
  
- **index** 表示使用indexscan或indexonlyscan的hint时，指定的索引名称，当前只能指定一个。
  ![](https://support.huaweicloud.com/devg-dws/public_sys-resources/note_3.0-zh-cn.png)
  对于indexscan或indexonlyscan，只有hint的索引属于hint的表时，才能使用该hint。
  scan hint支持在行列存表、hdfs内外表、obs表、子查询表上指定。对于hdfs内表，由主表和delta表组成，delta表对用户不可见，故hint仅作用在主表上。
  指定indexscan可生效indexscan或indexonlyscan，indexscan或indexonlyscan也可同时出现。当indexscan和indexonlyscan hint同时出现，优先生效indexonlyscan。
  
 
#### 示例
为了hint使用索引扫描，需要首先在表item的i_item_sk列上创建索引，名称为i：
```
create index i on item(i_item_sk);
```
对[示例](https://support.huaweicloud.com/devg-dws/dws_04_0455.html#ZH-CN_TOPIC_0000002053159594__zh-cn_topic_0000001658028034_section671421102912)中原语句使用如下hint：
```
explain
select /*+ indexscan(item i) */ i_product_name product_name ...
```
该hint表示：item表使用索引i进行扫描。生成计划如下所示：
![](https://support.huaweicloud.com/devg-dws/figure/zh-cn_image_0000001460723188.png "点击放大")
