VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

REINDEX

功能描述

为表中的数据重建索引。

在以下几种情况下需要使用REINDEX重建索引:

  • 索引崩溃,并且不再包含有效的数据。
  • 索引变得“臃肿”,包含大量的空页或接近空页。
  • 为索引更改了存储参数(例如填充因子),并且希望这个更改完全生效。

注意事项

  • REINDEX DATABASE、SYSTEM这种形式的重建索引不能在事务块中执行。
  • 不能在事务中reindex系统表。

语法格式

  • 重建普通索引。

    REINDEX { INDEX | [INTERNAL] TABLE | DATABASE | SYSTEM } name [ FORCE ];
    
  • 重建索引分区。

    REINDEX  { INDEX | [INTERNAL] TABLE  } name
    PARTITION partition_name [ FORCE  ];
    

参数说明

  • INDEX

    重新建立指定的索引。

  • INTERNAL TABLE

    重建列存表的Desc表的索引,如果表有从属的“TOAST”表,则这个表也会重建索引。

    此种情况大多用于故障恢复,不建议进行并发操作。

  • TABLE

    重新建立指定表的所有索引,如果表有从属的”TOAST”表,则这个表也会重建索引。如果表上有索引已经被alter unusable失效,则这个索引无法被重新创建。

  • DATABASE

    重建当前数据库里的所有索引。

  • SYSTEM

    在系统库上重建所有系统表上的索引。不会处理在用户表上的索引。

  • name

    需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。

    REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。

  • FORCE

    无效选项,会被忽略。

  • partition_name

    需要重建索引的分区的名称或者索引分区的名称。

    取值范围:

    • 如果前面是REINDEX INDEX,则这里应该指定索引分区的名称。
    • 如果前面是REINDEX TABLE,则这里应该指定分区的名称。
    • 如果前面是REINDEX INTERNAL TABLE,则这里应该指定列存分区表的分区的名称。

示例

1、创建一个行存表customer_t1,并在customer_t1表上的c_customer_sk字段创建索引。

CREATE TABLE 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);

CREATE INDEX customer_index1 ON customer_t1 (c_customer_sk);

2、重建一个单独索引。

REINDEX INDEX customer_index1;

3、重建表customer_t1上的所有索引。

REINDEX TABLE customer_t1;

4、删除customer_t1表。

DROP TABLE customer_t1;