更新时间:2025-10-11 GMT+08:00
REINDEX
功能描述
为表中的数据重建索引。
在以下几种情况下需要使用REINDEX重建索引:
注意事项
REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
存算分离架构下,不支持REINDEX全库索引。
- 避免在业务高峰期执行对大表执行CREATE INDEX和REINDEX操作。
- 更多开发设计规范参见《数据仓库服务开发指南》的“DWS总体开发设计规范”章节。
语法格式
- 重建全库索引或者系统表的索引。
1REINDEX { DATABASE | SYSTEM } name [ FORCE ];
- 重建普通索引或者普通表上的索引。
1REINDEX { INDEX | TABLE } name [ FORCE | WITHOUT UNUSABLE ]
- 重建索引分区或者分区上的索引。
1 2
REINDEX { | TABLE} name PARTITION partition_name [ FORCE | WITHOUT UNUSABLE ];
参数说明
|
参数 |
描述 |
取值范围 |
|---|---|---|
|
INDEX |
重新建立指定的索引。 |
- |
|
TABLE |
重新建立指定表的所有索引,如果表有从属的“TOAST”表,则这个表也会重建索引。 |
- |
|
DATABASE |
重建当前数据库里的所有索引。 |
- |
|
SYSTEM |
在当前数据库上重建所有系统表上的索引。不会处理在用户表上的索引。 |
- |
|
name |
需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。
说明:
REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。 |
- |
|
FORCE |
无效选项,会被忽略。 |
- |
|
WITHOUT UNUSABLE |
指定该参数时,在REINDEX时会忽略对象上的UNUSABLE索引或者UNUSABLE索引分区。该参数仅9.1.0.100及以上版本支持。 |
- |
|
partition_name |
需要重建索引的分区的名字或者索引分区的名字。 |
|
REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
示例
重建一个单独索引。
1
|
REINDEX INDEX tpcds.tpcds_customer_index1; |
重建表tpcds.customer_t1上的所有索引。
1
|
REINDEX TABLE tpcds.customer_t1; |
重建分区表customer_address分区P1的分区索引。
DROP TABLE IF EXISTS customer_address;
CREATE TABLE customer_address
(
ca_address_sk INTEGER NOT NULL ,
ca_address_id CHARACTER(16) NOT NULL ,
ca_street_number CHARACTER(10) ,
ca_street_name CHARACTER varying(60) ,
ca_street_type CHARACTER(15) ,
ca_suite_number CHARACTER(10)
)
DISTRIBUTE BY HASH (ca_address_sk)
PARTITION BY RANGE(ca_address_sk)
(
PARTITION P1 VALUES LESS THAN(2450815),
PARTITION P2 VALUES LESS THAN(2451179),
PARTITION P3 VALUES LESS THAN(2451544),
PARTITION P4 VALUES LESS THAN(MAXVALUE)
);
CREATE INDEX customer_address_index on customer_address(CA_ADDRESS_SK) LOCAL;
REINDEX TABLE customer_address PARTITION P1;