
# 指定是否使用partition-wise scan优化的hint
在SMP场景下，对于分区表的并发扫描方式分为两种：
- 每个线程会遍历所有分区，但是只读取分区的一部分数据，线程之间读取的数据没有交集，所有线程读取的数据合并后是分区的全部数据。
- 每个线程只和一部分分区绑定，线程之间绑定的分区没有交集，线程读取绑定分区的所有数据，该方式称为Partition-wise Scan。
在一些场景下，Partition-wise Scan能够更均匀地读取数据，具有更高的并发读取性能。
开启Partition-wise Scan的方式有如下两种：
- 设置GUC参数force_smp_partitionwise_scan。
- 设置partitionwisescan的hint。
#### 功能描述
在SMP场景下，指定语句是否对分区表使用Partition-wise Scan。
#### 语法格式
```
[no] partitionwisescan[(@tablename)]
```
#### 参数说明
- **no**
  不使用Partition-wise Scan查询改写。
  

- **@tablename**
  进行Partition-wise Scan的分区表，不可省略。
  
- **partitionwisescan**
  使用Partition-wise Scan对分区表进行并发扫描。
  
 
#### 示例
```
--创建分区表。
gaussdb=# CREATE TABLE partition_3_part
(
    a INTEGER,
    b INTEGER,
    c INTEGER
) PARTITION BY HASH(a) (
    PARTITION p1,
    PARTITION p2,
    PARTITION p3
);
--开启SMP和Partition-wise Join。
gaussdb=# SET query_dop = 5;
SET
gaussdb=# SET enable_smp_partitionwise = on;
SET
--使用partitionwisescan的hint。
gaussdb=# EXPLAIN SELECT /*+ partitionwisescan(partition_3_part)*/ count(*) FROM partition_3_part;
                                              QUERY PLAN                                              
------------------------------------------------------------------------------------------------------
 Aggregate  (cost=14.24..14.31 rows=1 width=8)
   ->  Streaming (type: GATHER)  (cost=14.24..14.31 rows=3 width=8)
         Node/s: All datanodes
         ->  Aggregate  (cost=14.18..14.19 rows=3 width=8)
               ->  Partition Iterator  (cost=0.00..14.14 rows=30 width=0)
                     Iterations: 3
                     ->  Partitioned Seq Scan on partition_3_part  (cost=0.00..14.14 rows=30 width=0)
                           Selected Partitions:  1..3
(8 rows)
-- 删除分区表
gaussdb=# DROP TABLE partition_3_part;
```
