REINDEX
描述
REINDEX使用索引的表里存储的数据重建一个索引, 并且替换该索引的旧拷贝。有一些场景需要使用REINDEX:
- 一个索引变得“臃肿”,其中包含很多空的或者近乎为空的页面。Greenplum数据库中的B-树索引在特定的非常规访问模式下可能会发生这种情况。REINDEX 提供了一种方法来减少索引的空间消耗,即制造一个新版本的索引,其中没有死亡页面。
INDEX
重新创建指定的索引。
TABLE
重新创建指定表的所有索引。如果该表有一个二级“TOAST”表,它也会被重索引。
重新创建当前数据库内的所有索引。共享的系统目录上的索引也会被 处理。这种形式的REINDEX不能在一个事务块内执行。
SYSTEM
重新创建当前数据库中在系统目录上的所有索引。共享系统目录上的 索引也被包括在内。用户表上的索引则不会被处理。这种形式的 REINDEX不能在一个事务块内执行。
name
要被重索引的特定索引、表或者数据库的名字。索引和表名可以被方案限定。当前,REINDEX DATABASE和REINDEX SYSTEM只能重索引当前数据库,因此它们的参数必须匹配当前数据库的名称。
注解
重索引单独一个索引或者表要求用户是该索引或表的拥有者。重索引一个 数据库要求用户是该数据库的拥有者(注意拥有者因此可以重建由其他 用户拥有的索引或者表)。当然,超级用户总是能够重索引任何东西。
如果怀疑共享全局系统表目录索引已经损坏,它们只能在Greenplum数据库的utility模式下进行重建索引。损坏一个共享索引的典型症状会出现“index is not a btree”的错误,或者服务器在启动的时候由于依赖在已经损坏的索引上而立即崩溃。在这种情况下,联系Greenplum客服支持获取帮助。
重建一个单独的索引:
重建表my_table上的所有索引:
兼容性
在SQL标准中没有REINDEX命令。
上级主题: