ALTER INDEX
功能描述
ALTER INDEX用于修改现有索引的定义。
注意事项
- 只有索引的所有者有权限执行此命令,系统管理员默认拥有此权限。
语法格式
- 重命名表索引的名字。
1 2
ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name;
- 修改表索引的存储参数。
1 2
ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] );
- 重置表索引的存储参数。
1 2
ALTER INDEX [ IF EXISTS ] index_name RESET ( storage_parameter [, ... ] ) ;
- 设置表索引或索引分区不可用。
1 2
ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE;
列存表不支持该语法。
- 重建表索引或索引分区。
1 2
ALTER INDEX index_name REBUILD [ PARTITION index_partition_name ];
- 重命名索引分区。
1 2
ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name;
PG_OBJECT系统表记录索引最后修改时间时不支持对该语法的记录。
- 添加,修改索引的注释。
1 2
ALTER INDEX [ IF EXISTS ] index_name COMMENT 'text';
- 删除索引的注释。
1 2 3 4
ALTER INDEX [ IF EXISTS ] index_name COMMENT ''; ALTER INDEX [ IF EXISTS ] index_name COMMENT NULL;
参数说明
- IF EXISTS
如果指定的索引不存在,则发出一个notice而不是error。
- RENAME TO
只改变索引的名字。对存储的数据没有影响。
- SET ( { STORAGE_PARAMETER = value } [, ...] )
改变索引的一个或多个索引方法特定的存储参数。 需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。
- RESET ( { storage_parameter } [, ...] )
重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。
- [ MODIFY PARTITION index_partition_name ] UNUSABLE
用于设置表或者索引分区上的索引不可用。
- REBUILD [ PARTITION index_partition_name ]
用于重建表或者索引分区上的索引。
- RENAME PARTITION
用于重命名索引分区。
- COMMENT comment_text
用于添加,修改或删除索引的注释。
- index_name
要修改的索引名。
- new_name
新的索引名。新的索引名不能与数据库中已有的表名重复。
取值范围:字符串,且符合标识符命名规范。
- storage_parameter
索引方法特定的参数名。
- value
索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。
- new_index_partition_name
新索引分区名。
- index_partition_name
索引分区名。
- comment_text
索引的注释信息。
示例
- 修改表的索引。
创建示例表tpcds.ship_mode_t1:
1 2 3 4 5 6 7 8 9 10 11
DROP TABLE IF EXISTS tpcds.ship_mode_t1; CREATE TABLE tpcds.ship_mode_t1 ( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20) ) DISTRIBUTE BY HASH(SM_SHIP_MODE_SK);
在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建唯一索引:
1 2
DROP INDEX IF EXISTS ds_ship_mode_t1_index1; CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK);
在表tpcds.ship_mode_t1上SM_CODE字段上创建表达式索引。
1 2
DROP INDEX IF EXISTS ds_ship_mode_t1_index2; CREATE INDEX ds_ship_mode_t1_index2 ON tpcds.ship_mode_t1(SUBSTR(SM_CODE,1 ,4));
重命名现有的索引ds_ship_mode_t1_index1为ds_ship_mode_t1_index5:
1
ALTER INDEX tpcds.ds_ship_mode_t1_index1 RENAME TO ds_ship_mode_t1_index5;
设置索引ds_ship_mode_t1_index2不可用:
1
ALTER INDEX tpcds.ds_ship_mode_t1_index2 UNUSABLE;
重建索引ds_ship_mode_t1_index2:
1
ALTER INDEX tpcds.ds_ship_mode_t1_index2 REBUILD;
- 修改表分区索引。
创建示例表tpcds.customer_address_p1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
DROP TABLE IF EXISTS tpcds.customer_address_p1; CREATE TABLE tpcds.customer_address_p1 ( CA_ADDRESS_SK INTEGER NOT NULL, CA_ADDRESS_ID CHAR(16) NOT NULL, CA_STREET_NUMBER CHAR(10) , CA_STREET_NAME VARCHAR(60) , CA_STREET_TYPE CHAR(15) , CA_SUITE_NUMBER CHAR(10) , CA_CITY VARCHAR(60) , CA_COUNTY VARCHAR(30) , CA_STATE CHAR(2) , CA_ZIP CHAR(10) , CA_COUNTRY VARCHAR(20) , CA_GMT_OFFSET DECIMAL(5,2) , CA_LOCATION_TYPE CHAR(20) ) DISTRIBUTE BY HASH(CA_ADDRESS_SK) PARTITION BY RANGE(CA_ADDRESS_SK) ( PARTITION p1 VALUES LESS THAN (3000), PARTITION p2 VALUES LESS THAN (5000) , PARTITION p3 VALUES LESS THAN (MAXVALUE) ) ENABLE ROW MOVEMENT;
创建分区表索引ds_customer_address_p1_index2,并指定索引分区的名字。
1 2 3 4 5 6 7 8
DROP INDEX IF EXISTS ds_customer_address_p1_index2; CREATE INDEX ds_customer_address_p1_index2 ON tpcds.customer_address_p1(CA_ADDRESS_SK) LOCAL ( PARTITION CA_ADDRESS_SK_index1, PARTITION CA_ADDRESS_SK_index2, PARTITION CA_ADDRESS_SK_index3 ) ;
重命名分区表的分区索引tpcds.ds_customer_address_p1_index2:
1
ALTER INDEX tpcds.ds_customer_address_p1_index2 RENAME PARTITION CA_ADDRESS_SK_index1 TO CA_ADDRESS_SK_index4;
修改索引的注释:
1
ALTER INDEX tpcds.ds_customer_address_p1_index2 COMMENT 'comment_ds_customer_address_p1_index2';