
# Scan方式的Hint
#### 功能描述
指明scan使用的方法，可以是tablescan、indexscan、index（功能同indexscan）和indexonlyscan。
#### 语法格式
```
[no] tablescan|indexscan|index|indexonlyscan|gsi|gsitable( [@queryblock] table [index])
```
#### 参数说明
- no表示hint的scan方式不使用。
 
- @queryblock请参见[指定Hint所处于的查询块Queryblock](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0295.html#ZH-CN_TOPIC_0000002527988096)，可省略，表示在当前查询块生效。
- table表示hint指定的表，只能指定一个表，如果表存在别名应优先使用别名进行hint。
- \[index\]表示使用indexscan、index或indexonlyscan的hint时，指定的索引名称，当前只能指定一个。
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- 对于indexscan、index或indexonlyscan，只有hint的索引属于hint的表时，才能使用该hint。
- scan hint支持在行存表、hdfs内外表、子查询表上指定。
- indexonlyscan的计划能够被indexscan、index的hint产生，但indexonly的hint只能产生indexonly的计划。
- indexscan、index兼容indexonlyscan时可能带来一些计划变化，使用cost_model_version进行逃生，通过cost_model_version可以控制是否兼容，在大于2或者等于0时生效。
- 集中式不支持gsi和gsitable hint。
 
#### 示例
为了hint使用索引扫描，需要首先在表item的i_item_sk列上创建索引，名称为i。
```
create index i on item(i_item_sk);
```
对[示例](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0294.html#ZH-CN_TOPIC_0000002559107871__zh-cn_topic_0000002558217815_zh-cn_topic_0283137554_zh-cn_topic_0237121532_section671421102912)中原语句使用如下hint：
```
explain
select /*+ indexscan(item i) */ i_product_name product_name ...
或
EXPLAIN
SELECT /*+ index(item i) */ i_product_name product_name ...
```
该hint表示：item表使用索引i进行扫描。生成计划如下所示：
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002527060304.png "点击放大")
在集中式环境下，使用gsi hint会报不支持告警。示例如下：
```
-- 创建表
create table gsi_test(a int, b int);
create index gsi_test_idx on gsi_test(a);
-- 使用索引
gaussdb=# explain select /*+  gsi(gsi_test gsi_test_idx) */ * from gsi_test where b = 1;
WARNING:  LINE 1: unsupport distributed hint at 'gsi'
                        QUERY PLAN
----------------------------------------------------------
 Seq Scan on gsi_test  (cost=0.00..36.86 rows=11 width=8)
   Filter: (b = 1)
(2 rows)
```
```
```
在集中式环境下，使用gsitable hint会报不支持告警。示例如下：
```
gaussdb=# explain select /*+ gsitable(gsi_test gsi_test_idx) */ * from gsi_test where b = 1;
WARNING:  LINE 1: unsupport distributed hint at 'gsitable'
                        QUERY PLAN
----------------------------------------------------------
 Seq Scan on gsi_test  (cost=0.00..36.86 rows=11 width=8)
   Filter: (b = 1)
(2 rows)
```
```
```
