首页 > 其他分享 >openGauss 创建和管理索引

openGauss 创建和管理索引

时间:2024-04-30 11:15:04浏览次数:24  
标签:p2 web tpcds 创建 索引 returns address openGauss

创建和管理索引

背景信息

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

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

  • 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。

  • 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。

  • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。

  • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。

  • 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。

  • 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。

    说明:

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

操作步骤

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

  • 创建索引

    • 创建分区表LOCAL索引tpcds_web_returns_p2_index1,不指定索引分区的名称。

      openGauss=# CREATE INDEX tpcds_web_returns_p2_index1 ON tpcds.web_returns_p2 (ca_address_id) LOCAL;
      

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

      CREATE INDEX
      
    • 创建分区表LOCAL索引tpcds_web_returns_p2_index2,并指定索引分区的名称。

      openGauss=# 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
      
    • 创建分区表GLOBAL索引tpcds_web_returns_p2_global_index。

      CREATE INDEX tpcds_web_returns_p2_global_index ON tpcds.web_returns_p2 (ca_street_number) GLOBAL;
      
  • 修改索引分区的表空间

    • 修改索引分区_web_returns_p2_P2_index_的表空间为example1。

      openGauss=# 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。

      openGauss=# 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。

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

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

    ALTER INDEX
    
  • 查询索引

    • 执行如下命令查询系统和用户定义的所有索引。

      openGauss=# SELECT RELNAME FROM PG_CLASS WHERE RELKIND='i' or RELKIND='I';
      
    • 执行如下命令查询指定索引的信息。

      openGauss=# \di+ tpcds.tpcds_web_returns_p2_index2 
      
  • 删除索引

    openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index1;
    openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index2;
    

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

    DROP INDEX
    

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

说明:

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

表 1 索引方式

索引方式

描述

唯一索引

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

多字段索引

一个索引可以定义在表中的多个属性上。目前,openGauss中的B-Tree支持多字段索引,。

部分索引

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

表达式索引

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

  • 创建一个普通表。

    openGauss=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
    INSERT 0 0
    
  • 创建普通索引

    如果对于tpcds.customer_address_bak表,需要经常进行以下查询。

    openGauss=# SELECT ca_address_sk FROM tpcds.customer_address_bak WHERE ca_address_sk=14888;
    

    通常,数据库系统需要逐行扫描整个tpcds.customer_address_bak表以寻找所有匹配的元组。如果表tpcds.customer_address_bak的规模很大,但满足WHERE条件的只有少数几个(可能是零个或一个),则这种顺序扫描的性能就比较差。如果让数据库系统在ca_address_sk属性上维护一个索引,用于快速定位匹配的元组,则数据库系统只需要在搜索树上查找少数的几层就可以找到匹配的元组,这将会大大提高数据查询的性能。同样,在数据库中进行更新和删除操作时,索引也可以提升这些操作的性能。

    使用以下命令创建索引。

    openGauss=# CREATE INDEX index_wr_returned_date_sk ON tpcds.customer_address_bak (ca_address_sk);
    CREATE INDEX
    
  • 创建唯一索引

    在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建唯一索引。

    openGauss=# CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK);
    
  • 创建多字段索引

    假如用户需要经常查询表tpcds.customer_address_bak中ca_address_sk是5050,且ca_street_number小于1000的记录,使用以下命令进行查询。

    openGauss=# SELECT ca_address_sk,ca_address_id FROM tpcds.customer_address_bak WHERE ca_address_sk = 5050 AND ca_street_number < 1000;
    

    使用以下命令在字段ca_address_sk和ca_street_number上定义一个多字段索引。

    openGauss=# CREATE INDEX more_column_index ON tpcds.customer_address_bak(ca_address_sk ,ca_street_number );
    CREATE INDEX
    
  • 创建部分索引

    如果只需要查询ca_address_sk为5050的记录,可以创建部分索引来提升查询效率。

    openGauss=# CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;
    CREATE INDEX
    
  • 创建表达式索引

    假如经常需要查询ca_street_number小于1000的信息,执行如下命令进行查询。

    openGauss=# SELECT * FROM tpcds.customer_address_bak WHERE trunc(ca_street_number) < 1000;
    

    可以为上面的查询创建表达式索引:

    openGauss=# CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));
    CREATE INDEX
    
  • 删除tpcds.customer_address_bak表。

    openGauss=# DROP TABLE tpcds.customer_address_bak;
    DROP TABLE
    

详情查看:https://opengauss.org

详情查看:https://docs-opengauss.osinfra.cn

标签:p2,web,tpcds,创建,索引,returns,address,openGauss
From: https://www.cnblogs.com/techbing/p/18167324

相关文章

  • openGauss 创建和管理序列
    创建和管理序列背景信息序列Sequence是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。这也是Sequence常被用作主键的原因。通过序列使某字段成为唯一标识符的方法有两种:一种是声明字段的类型为序列整型......
  • openGauss 创建和管理数据库
    创建和管理数据库前提条件用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库,赋予创建数据库的权限参见管理用户及权限。背景信息初始时,openGauss包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。postgres默认的兼容数据库......
  • openGauss 创建和管理分区表
    创建和管理分区表背景信息openGauss数据库支持的分区表为范围分区表、间隔分区表、列表分区表、哈希分区表。范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进......
  • openGauss 创建和管理视图
    创建和管理视图背景信息当用户对数据库中的一张或者多张表的某些字段的组合感兴趣,而又不想每次键入这些查询时,用户就可以定义一个视图,以便解决这个问题。视图与基本表不同,不是物理上实际存在的,是一个虚表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来......
  • openGauss 创建和管理表
    创建和管理表创建表向表中插入数据更新表中数据查看数据删除表中数据详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......
  • openGauss 创建和管理表空间
    创建和管理表空间背景信息通过使用表空间,管理员可以控制一个数据库安装的磁盘布局。这样有以下优点:如果初始化数据库所在的分区或者卷空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。表空间允许管理员根据数据库对象的使用模......
  • openGauss 创建和管理schema
    创建和管理schema背景信息schema又称作模式。通过管理schema,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的schema下而不引起冲突。管理schema包括:创建schema、使用schema、删除schema、设置schema的搜索路径......
  • openGauss 管理员
    管理员初始用户数据库安装过程中自动生成的帐户称为初始用户。初始用户拥有系统的最高权限,能够执行所有的操作。如果安装时不指定初始用户名称则该帐户与进行数据库安装的操作系统用户同名。如果在安装时不指定初始用户的密码,安装完成后密码为空,在执行其他操作前需要通过gsql客......
  • openGauss 归档账本数据库
    归档账本数据库前提条件系统中需要有审计管理员或者具有审计管理员权限的角色。数据库正常运行,并且对防篡改数据库执行了一系列增、删、改等操作,保证在查询时段内有账本操作记录结果产生。数据库已经正确配置审计文件的存储路径audit_directory。背景信息账本数据库归档......
  • openGauss 管理数据库安全
    管理数据库安全客户端接入认证管理用户及权限设置数据库审计设置账本数据库详情查看:https://opengauss.org详情查看:https://docs-opengauss.osinfra.cn......