
# ALTER INDEX
#### 功能描述
用于修改已有索引的定义。
#### 注意事项
- 索引的所有者、拥有索引所在表的INDEX权限的用户或者被授予了ALTER ANY INDEX权限的用户有权限执行此命令，当三权分立开关关闭时，系统管理员默认拥有此权限。
- 请勿在同一基表上保持大量的不可见索引，否则可能会对INSERT、UPDATE、DELETE等DML操作的性能产生影响。
 
#### 语法格式
- 重命名表索引的名称。
  ```
  ALTER INDEX [ IF EXISTS ] index_name 
      RENAME TO new_name;
  ```
  ![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/figure/zh-cn_image_0000002558213703.png "点击放大")
  

- 设置表索引不可用。
  ```
  ALTER INDEX [ IF EXISTS ] index_name UNUSABLE;
  ```
  

- 重命名索引分区。
  ```
  ALTER INDEX [ IF EXISTS ] index_name 
      RENAME PARTITION index_partition_name TO new_index_partition_name;
  ```
  ![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/figure/zh-cn_image_0000002526893896.png "点击放大")
  
- 修改表索引的存储参数。
  ```
  ALTER INDEX [ IF EXISTS ] index_name 
      SET ( {storage_parameter = value} [, ... ] );
  ```
  
 
- 重置表索引的存储参数。
  ```
  ALTER INDEX [ IF EXISTS ] index_name 
      RESET ( {storage_parameter = value} [, ... ] );
  ```
  
#### 参数说明
- **index_name**
  要修改的索引名称。
  
- **IF EXISTS**
  如果指定的索引不存在，则发出一个notice而不是error。
  
- **RENAME TO new_name**
  只改变索引的名称。对存储的数据没有影响。
  **new_name**
  新的索引名。
  取值范围：字符串，且符合[标识符说明](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0040.html#ZH-CN_TOPIC_0000002558805265)。
  
- **RENAME PARTITION index_partition_name TO new_index_partition_name**
  用于重命名索引分区。
  
- **new_index_partition_name**
  新索引分区名。
  
- **index_partition_name**
  索引分区名。
  
- **SET ( {storage_parameter = value} \[, ... \] )**
  改变索引的一个或多个索引方法特定的存储参数。需要注意的是索引内容不会被这个命令立即修改，根据参数的不同，可能需要使用REINDEX重建索引来获得期望的效果。
  - **storage_parameter**
    索引方法特定的参数名。ACTIVE_PAGES表示索引的页面数量，可能比实际的物理文件页面少，可以用于优化器调优。目前只对ustore的分区表local索引生效，且会被vacuum、analyze更新（包括auto vacuum）。不建议用户手动设置该参数，该参数在分布式下无效。对GSI执行ALTER时，对INTERNAL_MASK、APPEND_MODE_INTERNAL、WAIT_CLEAN_GPI、PARTITION_DDL_FLAG、COLLATE、CROSSBUCKET和DEDUPLICATION参数不支持，行为同UBtree，支持FILLFACTOR、INDEXSPLIT参数，ACTIVE_PAGES和WAIT_CLEAN_CBI 不适用于GSI。
    
  
  - **value**
    索引方法特定的存储参数的新值。根据参数的不同，这可能是一个数字或单词。
    
   
- **RESET ( { storage_parameter } \[, ...\] )**
  重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样，可能需要使用REINDEX来完全更新索引。
  
 
#### 示例
- 重命名索引。
  ```
  --创建test1表并为其创建索引。
  m_db=# CREATE TABLE test1(col1 INT, col2 INT);
  m_db=# CREATE INDEX aa ON test1(col1);
  --将索引aa重命名为idx_test1_col1。
  m_db=# ALTER INDEX aa RENAME TO idx_test1_col1;
  --查询test1表上的索引信息。
  m_db=# SELECT tablename,indexname,tablespace FROM pg_indexes WHERE tablename = 'test1';
   tablename |   indexname    | tablespace 
  -----------+----------------+------------
   test1     | idx_test1_col1 | 
  (1 row)
  ```
  
- 重命名索引分区。
  ```
  --创建分区表test2。
  m_db=# CREATE TABLE test2(col1 int, col2 int) PARTITION BY RANGE (col1)(
      PARTITION p1 VALUES LESS THAN (100),
      PARTITION p2 VALUES LESS THAN (200)
  );
  --创建分区索引。
  m_db=# CREATE INDEX idx_test2_col1 ON test2(col1) LOCAL(
      PARTITION p1,
      PARTITION p2
  );
  --重命名索引分区。
  m_db=# ALTER INDEX idx_test2_col1 RENAME PARTITION p1 TO p1_test2_idx;
  m_db=# ALTER INDEX idx_test2_col1 RENAME PARTITION p2 TO p2_test2_idx;
  --查询索引idx_test2_col1分区的名称。
  m_db=# SELECT relname FROM pg_partition WHERE parentid = 'idx_test2_col1'::regclass;
     relname    
  --------------
   p1_test2_idx
   p2_test2_idx
  (2 rows)
  ```
  
 
#### 相关链接
[CREATE INDEX](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0073.html#ZH-CN_TOPIC_0000002558925201)，[DROP INDEX](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0089.html#ZH-CN_TOPIC_0000002558925211)，[REINDEX](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/gaussdb-81-0111.html#ZH-CN_TOPIC_0000002558925225)
