
# 操作步骤
1. 创建IMCV。 
   可通过ALTER TABLE ... COLVIEW命令为已有行存表创建IMCV。默认采用异步加载模式，命令返回后，由后台线程负责IMCV的加载。
   ```
   gaussdb=# ALTER TABLE lineitem COLVIEW;
   ALTER TABLE
   ```
   命令执行成功后，可通过系统函数gs_htap_imcv_info()查询IMCV的加载状态及内存使用情况。其中，rowgroup_num表示预期生成的行组数量，populated_rowgroup_num表示已完成加载的行组数量。
   若表中存在数据但rowgroup_num=0，表示IMCV的行组尚未初始化；当populated_rowgroup_num=rowgroup_num时，表示IMCV已全部加载完成。
   ```
   gaussdb=# SELECT rowgroup_num, populated_rowgroup_num, cu_num_in_mem, cu_mem_size, cu_num_in_disk, cu_disk_size FROM gs_htap_imcv_info();
    rowgroup_num | populated_rowgroup_num | cu_num_in_mem | cu_mem_size  | cu_num_in_disk | cu_disk_size 
   --------------+------------------------+---------------+--------------+----------------+--------------
           12091 |                  12091 |        205547 | 120532019284 |              0 |            0
   (1 row)
   ```
   
   
2. 列存扫描加速。 
   在目标表完成IMCV创建后，该表上的查询即可利用列存扫描进行加速。
   首先需要确认列存扫描开关及HTAP路由模式参数配置正确。推荐将htap_router_mode设置为auto，由优化器根据代价模型自动选择行存或列存扫描路径：
   ```
   gaussdb=# SHOW enable_imcvscan;
    enable_imcvscan 
   -----------------
    on
   (1 row)
   gaussdb=# SHOW htap_router_mode;
    htap_router_mode 
   ------------------
    auto
   (1 row)
   ```
   可通过EXPLAIN查看执行计划，确认查询是否采用列存扫描（IMCV Scan）路径：
   ```
   gaussdb=# EXPLAIN SELECT * FROM lineitem;
                                      QUERY PLAN                                   
   --------------------------------------------------------------------------------
    Row Adapter  (cost=12690329.91..12690329.91 rows=600055911 width=129)
      ->  Imcv Scan on lineitem  (cost=0.00..12690329.91 rows=600055911 width=129)
   (2 rows)
   ```
   若由于代价估计不准确等原因，在列存扫描具有实际收益的场景下，优化器未选择列存扫描路径，可通过以下方式进行干预：
   - 设置htap_router_mode='column'，强制优先选择列存扫描路径。
   
   - 或为查询添加IMCVScan Hint。
   
   
   ```
   gaussdb=# EXPLAIN SELECT /*+ imcvscan(lineitem)*/ * FROM lineitem;
                                      QUERY PLAN                                   
   --------------------------------------------------------------------------------
    Row Adapter  (cost=12690329.91..12690329.91 rows=600055911 width=129)
      ->  Imcv Scan on lineitem  (cost=0.00..12690329.91 rows=600055911 width=129)
   (2 rows)
   ```
   
   
3. 卸载IMCV（可选）。 
   当不再需要该表的IMCV并释放对应的内存空间时，可通过ALTER ... NOCOLVIEW命令完成卸载。
   ```
   gaussdb=# ALTER TABLE lineitem NOCOLVIEW;
   ALTER TABLE
   ```
   
   
 
