REINDEX
功能描述
为表中的数据重建索引。
在以下几种情况下需要使用REINDEX重建索引:
- 索引崩溃,并且不再包含有效的数据。
- 索引变得“臃肿”,包含大量的空页或接近空页。
- 为索引更改了存储参数(例如填充因子),并且希望这个更改完全生效。
注意事项
REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
语法格式
- 重建普通索引。
1
REINDEX { INDEX | [INTERNAL] TABLE | DATABASE | SYSTEM } name [ FORCE ];
- 重建索引分区。
1 2
REINDEX { INDEX| [INTERNAL] TABLE} name PARTITION partition_name [ FORCE ];
参数说明
- INDEX
重新建立指定的索引。
- TABLE
重新建立指定表的所有索引,如果表有从属的“TOAST”表,则这个表也会重建索引。如果表上有索引已经被alter unusable失效,则这个索引无法被重新创建。
- DATABASE
重建当前数据库里的所有索引。
- SYSTEM
在当前数据库上重建所有系统表上的索引。不会处理在用户表上的索引。
- name
需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。
REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。
- FORCE
废弃选项,仅为保持前向兼容,故继续保留。
- partition_name
需要重建索引的分区的名称或者索引分区的名称。
取值范围:
- 如果前面是REINDEX INDEX,则这里应该指定索引分区的名称;
- 如果前面是REINDEX TABLE,则这里应该指定分区的名称;
- REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。
- REINDEX不支持单独操作toast表或toast索引。
示例
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
--创建SCHEMA。 openGauss=# CREATE SCHEMA tpcds; --创建表tpcds.customer。 openGauss=# CREATE TABLE tpcds.customer ( c_customer_sk INTEGER NOT NULL, c_customer_id CHAR(16) NOT NULL ); --向表中插入多条记录。 openGauss=# INSERT INTO tpcds.customer VALUES (1, 'AAAAAAAABAAAAAAA'),(5, 'AAAAAAAACAAAAAAA'),(10, 'AAAAAAAADAAAAAAA'); --创建一个行存表tpcds.customer_t1,并在tpcds.customer_t1表上的c_customer_sk字段创建索引。 openGauss=# CREATE TABLE tpcds.customer_t1 ( c_customer_sk integer not null, c_customer_id char(16) not null, c_current_cdemo_sk integer , c_current_hdemo_sk integer , c_current_addr_sk integer , c_first_shipto_date_sk integer , c_first_sales_date_sk integer , c_salutation char(10) , c_first_name char(20) , c_last_name char(30) , c_preferred_cust_flag char(1) , c_birth_day integer , c_birth_month integer , c_birth_year integer , c_birth_country varchar(20) , c_login char(13) , c_email_address char(50) , c_last_review_date char(10) ) WITH (orientation = row); openGauss=# CREATE INDEX tpcds_customer_index1 ON tpcds.customer_t1 (c_customer_sk); openGauss=# INSERT INTO tpcds.customer_t1 SELECT * FROM tpcds.customer WHERE c_customer_sk < 10; --重建一个单独索引。 openGauss=# REINDEX INDEX tpcds.tpcds_customer_index1; --重建表tpcds.customer_t1上的所有索引。 openGauss=# REINDEX TABLE tpcds.customer_t1; --删除tpcds.customer_t1表。 openGauss=# DROP TABLE tpcds.customer_t1; --删除表。 openGauss=# DROP TABLE tpcds.customer; --删除SCHEMA。 openGauss=# DROP SCHEMA tpcds CASCADE; |