ALTER INDEX
功能描述
ALTER INDEX用于修改索引的定义。
注意事项
只有索引的所有者有权限执行此命令,系统管理员默认拥有此权限。
语法格式
- 重命名表索引的名称,支持新的索引名称前带有原索引所在的schema名,但是不支持同时修改schema名。
1 2 3 4
ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name; ALTER INDEX [ IF EXISTS ] index_name RENAME TO schema.new_name;
- 修改表索引的存储参数。
1 2
ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] );
- 修改索引的状态标记。
1 2
ALTER INDEX [ IF EXISTS ] index_name SET ( {invisible = 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 ] [WITHOUT UNUSABLE];
- 重命名索引分区。PG_OBJECT系统表记录索引的最后修改时间时,暂不支持对该语法的记录。
1 2
ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name;
- 添加,修改索引的注释。
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 |
如果指定的索引不存在时,返回一个提示而不是错误。 |
- |
RENAME TO |
修改索引的名称,对存储的数据本身没有任何影响。 |
- |
SET ( { STORAGE_PARAMETER = value } [, ...] ) |
修改索引的一个或多个索引方法特定的存储参数。 此命令不会立即修改索引内容,根据参数的不同,可能需要使用REINDEX重建索引来获得所需的效果。 |
取值范围和详细用法参见表2。 |
RESET ( { storage_parameter } [, ...] ) |
重置索引的一个或多个索引方法特定的存储参数为默认值。与SET一样,可能需要使用REINDEX来完全更新索引。 |
- |
[ MODIFY PARTITION index_partition_name ] UNUSABLE |
用于设置表或者索引分区上的索引不可用。 |
- |
REBUILD [ PARTITION index_partition_name ] |
用于重建表或者索引分区上的索引。 |
- |
WITHOUT UNUSABLE |
重建表或者索引分区上的索引时不重建状态为UNUSABLE的索引。 |
- |
RENAME PARTITION |
用于重命名索引分区。 |
- |
COMMENT comment_text |
用于添加,修改或删除索引的注释。 |
- |
index_name |
需要修改的索引名。 |
已存在的索引名。 |
new_name |
新的索引名。 |
字符串,需符合标识符命名规范。 |
storage_parameter |
索引方法特定的参数名。 |
- |
invisible |
控制优化器是否生成索引扫描相关计划。默认值:OFF。 |
ON或OFF。
|
value |
索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 |
- |
new_index_partition_name |
新索引分区名。 |
字符串,需符合标识符命名规范。 |
index_partition_name |
索引分区名。 |
字符串,需符合标识符命名规范。 |
comment_text |
索引的注释信息。 |
- |
存储参数 |
描述 |
示例 |
||
---|---|---|---|---|
FILLFACTOR |
GIN和PSORT索引不支持该参数,表示一个索引的填充因子(fillfactor),取值范围是一个介于10和100之间的百分比值,用于指定索引页初始填充的百分比,剩余的空间可以用于后续的插入和更新操作,从而减少页面分裂和提高性能。 该参数的作用是控制索引页的填充程度,从而影响数据库的性能和存储空间的利用效率,通过调整FILLFACTOR的值,可以减少后续更新或插入操作导致的页分裂,优化索引的存储和性能。 FILLFACTOR对索引性能的影响:
如何选择合适的FILLFACTOR值:
|
修改索引的填充因子FILLFACTOR为60%。
|
||
INVISIBLE |
控制优化器是否生成索引扫描相关计划。 适用场景:维护期间临时禁用索引,或测试索引对性能的影响。 取值范围:
默认值:OFF |
设置优化器不生成索引的扫描相关计划。
|
||
FASTUPDATE |
仅GIN索引支持该参数,GIN索引是否使用快速更新,当启用后,数据变更会暂存到待处理列表(Pending List)。 取值范围:ON,OFF 默认值:ON |
打开快速更新参数FASTUPDATE,设置该索引Pending List容量的最大值为8MB。
|
||
GIN_PENDING_LIST_LIMIT |
仅GIN索引支持该参数,当GIN索引启用fastupdate时,设置该索引Pending List容量的最大值。 Pending List是GIN索引特有的数据结构,用于临时存储索引更新操作。当GIN索引启用FASTUPDATE参数时,新的索引项不会直接写入主索引结构,而是先存入Pending List,待满足特定条件时再批量合并到主索引中。 取值范围:64~INT_MAX,单位KB。 默认值:由GUC参数gin_pending_list_limit的值决定(默认为4MB)。 |
示例
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; |