ALTER INDEX
ALTER INDEX¶
更改一个索引的定义。
- 语法
-
``` sql ALTER INDEX [ IF EXISTS ] name RENAME TO new_name
ALTER INDEX [ IF EXISTS ] name SET TABLESPACE tablespace_name
ALTER INDEX [ IF EXISTS ] name SET ( storage_parameter = value [, …] )
ALTER INDEX [ IF EXISTS ] name RESET ( storage_parameter [, …] )
ALTER INDEX ALL IN TABLESPACE name [ OWNED BY role_name [, … ] ] SET TABLESPACE new_tablespace [ NOWAIT ] ```
- 描述
-
ALTER INDEX
更改存在的一个索引的定义。 有下列的一些子形式:RENAME
- 修改索引的名字,对存储的数据无影响。
SET TABLESPACE
- 修改索引的表空间到指定的表空间,然后将分配给这个索引的数据文件也移到新的表空间。要修改索引的表空间,你必须在新的表空间有
CREATE
的权限。在当前数据库中一个表空间下所有的索引可以用ALL IN TABLESPACE
形式移动, 这会锁住所有的要移动的索引,然后移动每一个索引。这种方式也在OWNED BY
形式中支持,这只会移动指定角色所拥有的索引。指定了NOWAIT
选项的话,如果不能立即获取到需要的锁,命令将会失败。注意系统目录不会被这个命令移动,如果需要,请使用ALTER DATABASE
或者显式调用调用ALTER INDEX
。另见CREATE TABLESPACE
. IF EXISTS
- 如果索引不存在不会抛出错误,而会触发一个提醒。
SET
- 更改索引的特定于索引方法的存储参数。内置索引方法都接受一个参数:
fillfactor
。 索引的fillfactor
是一个百分比,用于确定索引方法尝试打包索引页的程度。 此命令不会立即修改索引内容。使用REINDEX
重建索引以获得所需的效果。 RESET
- 将索引的存储参数重置为其默认值。内置索引方法都接受一个参数:
fillfactor
。与SET
一样,可能需要REINDEX
来完全更新索引。
- 参数
-
该SQL命令参数说明见下
name
- 要修改的现有索引的名称(可选方案限定)。
new_name
- 索引的新名称。
tablespace_name
- 要移动索引的表空间。
storage_parameter
- index-method-specific指定的存储参数名称。
value
- index-method-specific指定的存储参数值,这可能是基于参数的数字或者词。
- 注意
- 这些操作也可能用
ALTER TABLE
实现。不允许更改系统目录索引的任何部分。 - 示例
-
修改一个索引的名字:
ALTER INDEX distributors RENAME TO suppliers;
移动索引到另外一个表空间:
ALTER INDEX distributors SET TABLESPACE fasttablespace;
要更改索引的填充因子(假设索引方法支持它):
ALTER INDEX distributors SET (fillfactor = 75); REINDEX INDEX distributors;
- 兼容性说明
ALTER INDEX
是SeaboxMPP数据库的扩展。- 相关SQL命令
CREATE INDEX
,REINDEX
,ALTER TABLE