云数据库 GAUSSDB-CREATE INDEX:示例

时间:2024-11-01 17:13:44

示例

  • 普通索引
    --创建tbl_test1表。
    gaussdb=# CREATE TABLE tbl_test1(
        id int,           --用户id
        name varchar(50), --用户姓名
        postcode char(6)  --邮编
    );
    
    --创建表空间tbs_index1。
    gaussdb=# CREATE TABLESPACE tbs_index1 RELATIVE LOCATION 'test_tablespace/tbs_index1';
    
    --为表tbl_test1创建索引idx_test1指定表空间。
    gaussdb=# CREATE INDEX idx_test1 ON tbl_test1(name) TABLESPACE tbs_index1;
    
    --查询索引idx_test1信息。
    gaussdb=# SELECT indexname,tablename,tablespace FROM pg_indexes WHERE indexname = 'idx_test1';
     indexname | tablename | tablespace 
    -----------+-----------+------------
     idx_test1 | tbl_test1 | tbs_index1
    (1 row)
    
    --删除索引。
    gaussdb=# DROP INDEX idx_test1;
    
    --删除表空间。
    gaussdb=# DROP TABLESPACE tbs_index1;
  • 唯一索引
    --为表tbl_test1创建唯一索引idx_test2。
    gaussdb=# CREATE UNIQUE INDEX idx_test2 ON tbl_test1(id);
    
    --查询索引信息。
    gaussdb=# \d tbl_test1
               Table "public.tbl_test1"
      Column  |         Type          | Modifiers 
    ----------+-----------------------+-----------
     id       | integer               | 
     name     | character varying(50) | 
     postcode | character(6)          | 
    Indexes:
        "idx_test2" UNIQUE, btree (id) TABLESPACE pg_default
    
    --删除索引。
    gaussdb=# DROP INDEX idx_test2;
  • 表达式索引
    --为表tbl_test1创建一个表达式索引。
    gaussdb=# CREATE INDEX idx_test3 ON tbl_test1(substr(postcode,2));
    
    --查询索引信息。
    gaussdb=# \d tbl_test1
               Table "public.tbl_test1"
      Column  |         Type          | Modifiers 
    ----------+-----------------------+-----------
     id       | integer               | 
     name     | character varying(50) | 
     postcode | character(7)          | 
    Indexes:
        "idx_test3" btree (substr(postcode::text, 2)) TABLESPACE pg_default
    
    --删除索引。
    gaussdb=# DROP INDEX idx_test3;
  • 部分索引
    --为表tbl_test1中id不为为空的数据建立索引。
    gaussdb=# CREATE INDEX idx_test4 ON tbl_test1(id) WHERE id IS NOT NULL;
    
    --删除索引。
    gaussdb=# DROP INDEX idx_test4;
    
    --删除表。
    gaussdb=# DROP TABLE tbl_test1;
  • 分区索引
    --建表。
    gaussdb=# CREATE TABLE student(id int, name varchar(20)) PARTITION BY RANGE (id) (
        PARTITION p1 VALUES LESS THAN (200),
        PARTITION pmax VALUES LESS THAN (MAXVALUE)
    );
    
    --创建LOCAL分区索引不指定索引分区的名称。
    gaussdb=# CREATE INDEX idx_student1 ON student(id) LOCAL;
    
    --查看索引分区信息,LOCAL索引分区数和表的分区数一致。
    gaussdb=# SELECT relname FROM pg_partition WHERE parentid = 'idx_student1'::regclass;
       relname   
    -------------
     p1_id_idx
     pmax_id_idx
    (2 rows)
    
    --删除LOCAL分区索引。
    gaussdb=# DROP INDEX idx_student1;
    
    --创建GLOBAL索引。
    gaussdb=# CREATE INDEX idx_student2 ON student(name) GLOBAL;
    
    --查看索引分区信息,GLOBAL索引分区数和表的分区数不一致。
    gaussdb=# SELECT relname FROM pg_partition WHERE parentid = 'idx_student2'::regclass;
     relname 
    ---------
    (0 rows)
    
    --删除GLOBAL分区索引。
    gaussdb=# DROP INDEX idx_student2;
     
    --创建LOCAL表达式索引,不指定索引分区的名称。
    gaussdb=# CREATE INDEX idx_student3 ON student(lower(name)) LOCAL;
    
    --查看索引分区信息,LOCAL索引分区数和表的分区数一致。
    gaussdb=# SELECT relname FROM pg_partition WHERE parentid = 'idx_student3'::regclass;
       relname   
    -------------
     p1_id_idx
     pmax_id_idx
    (2 rows)
    
    --删除LOCAL分区表达式索引。
    gaussdb=# DROP INDEX idx_student3;
    
    --创建GLOBAL表达式索引。
    gaussdb=# CREATE INDEX idx_student4 ON student(lower(name)) GLOBAL;
    
    --查看索引分区信息,GLOBAL表达式索引分区数和表的分区数不一致。
    gaussdb=# SELECT relname FROM pg_partition WHERE parentid = 'idx_student4'::regclass;
     relname 
    ---------
    (0 rows)
    
    --删除GLOBAL分区表达式索引。
    gaussdb=# DROP INDEX idx_student4;
    
    --删除表。
    gaussdb=# DROP TABLE student;
support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0550.html