暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GaussDB数据库-创建和管理索引

CY 学数据库 2023-08-24
1534

背景信息

索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。

索引建立在数据库表中的某些列上。因此,在创建索引时,应该仔细考虑在哪些列上创建索引。

  • 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。
  • 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。
  • 在经常使用连接的列上创建索引,可以加快连接的速度。
  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
  • 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。
  • 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。

    说明:

    • 索引创建成功后,系统会自动判断何时引用索引。当系统认为使用索引比顺序扫描更快时,就会使用索引。
    • 索引创建成功后,必须和表保持同步以保证能够准确地找到新数据,这样就增加了数据操作的负荷。因此请定期删除无用的索引。
  • 在开启逻辑复制的场景下,如需创建包含系统列的主键索引,必须将该表的REPLICA IDENTITY属性设置为FULL或是使用USING INDEX指定不包含系统列的、唯一的、非局部的、不可延迟的、仅包括标记为NOT NULL的列的索引。

操作步骤

创建分区表的步骤请参考创建和管理分区表

  • 创建索引
    • 创建分区表索引tpcds_web_returns_p2_index1,不指定索引分区的名称。
      gaussdb=# CREATE INDEX tpcds_web_returns_p2_index1 ON tpcds.web_returns_p2 (ca_address_id) LOCAL;

      当结果显示为如下信息,则表示创建成功。

      CREATE INDEX
    • 创建分区表索引tpcds_web_returns_p2_index2,并指定索引分区的名称。
      gaussdb=# CREATE INDEX tpcds_web_returns_p2_index2 ON tpcds.web_returns_p2 (ca_address_sk) LOCAL
      (
          PARTITION web_returns_p2_P1_index,
          PARTITION web_returns_p2_P2_index TABLESPACE example3,
          PARTITION web_returns_p2_P3_index TABLESPACE example4,
          PARTITION web_returns_p2_P4_index,
          PARTITION web_returns_p2_P5_index,
          PARTITION web_returns_p2_P6_index,
          PARTITION web_returns_p2_P7_index,
          PARTITION web_returns_p2_P8_index
      ) TABLESPACE example2;

      当结果显示为如下信息,则表示创建成功。

      CREATE INDEX
  • 修改索引分区的表空间
    • 修改索引分区web_returns_p2_P2_index的表空间为example1。
      gaussdb=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P2_index TABLESPACE example1;

      当结果显示为如下信息,则表示修改成功。

      ALTER INDEX
    • 修改索引分区web_returns_p2_P3_index的表空间为example2。
      gaussdb=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 MOVE PARTITION web_returns_p2_P3_index TABLESPACE example2;

      当结果显示为如下信息,则表示修改成功。

      ALTER INDEX
  • 重命名索引分区

    执行如下命令对索引分区web_returns_p2_P8_index重命名web_returns_p2_P8_index_new。

    gaussdb=# ALTER INDEX tpcds.tpcds_web_returns_p2_index2 RENAME PARTITION web_returns_p2_P8_index TO web_returns_p2_P8_index_new;

    当结果显示为如下信息,则表示重命名成功。

    ALTER INDEX
  • 查询索引
    • 执行如下命令查询系统和用户定义的所有索引。
      gaussdb=# SELECT RELNAME FROM PG_CLASS WHERE RELKIND='i';
    • 执行如下命令查询指定索引的信息。
      gaussdb=# \di+ tpcds.tpcds_web_returns_p2_index2 
  • 删除索引
    gaussdb=# DROP INDEX tpcds.tpcds_web_returns_p2_index1;
    gaussdb=# DROP INDEX tpcds.tpcds_web_returns_p2_index2;

    当结果显示为如下信息,则表示删除成功。

    DROP INDEX

GaussDB Kernel支持4种创建索引的方式请参见表1

说明:

  • 索引创建成功后,系统会自动判断何时引用索引。当系统认为使用索引比顺序扫描更快时,就会使用索引。
  • 索引创建成功后,必须和表保持同步以保证能够准确地找到新数据,这样就增加了数据操作的负荷。因此请定期删除无用的索引。

表1 索引方式

索引方式

描述

唯一索引

可用于约束索引属性值的唯一性,或者属性组合值的唯一性。如果一个表声明了唯一约束或者主键,则GaussDB Kernel自动在组成主键或唯一约束的字段上创建唯一索引(可能是多字段索引),以实现这些约束。目前,GaussDB Kernel只有B-Tree及UBTree可以创建唯一索引。

多字段索引

一个索引可以定义在表中的多个属性上。目前,GaussDB Kernel中的B-Tree支持多字段索引,且最多可在32个字段上创建索引。

部分索引

建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。

表达式索引

索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。

  • 创建一个普通表。
    gaussdb=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
    INSERT 0 0


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论