openGauss学习笔记-73 openGauss 数据库管理-创建和管理索引

文章目录

    • openGauss学习笔记-73 openGauss 数据库管理-创建和管理索引
      • 73.1 背景信息
      • 73.2 操作步骤
        • 73.2.1 创建索引
        • 73.2.2 修改索引分区的表空间
        • 73.2.3 重命名索引分区
        • 73.2.4 查询索引
        • 73.2.5 删除索引
        • 73.2.6 创建索引的方式
          • 73.2.6.1 创建普通索引
          • 73.2.6.2 创建多字段索引
          • 73.2.6.3 创建部分索引
          • 73.2.6.4 创建表达式索引

openGauss学习笔记-73 openGauss 数据库管理-创建和管理索引

73.1 背景信息

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

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

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

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

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

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

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

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

    img 说明:

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

73.2 操作步骤

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

73.2.1 创建索引
  • 创建分区表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。

    openGauss=# CREATE INDEX tpcds_web_returns_p2_global_index ON tpcds.web_returns_p2 (ca_street_number) GLOBAL;
    
73.2.2 修改索引分区的表空间
  • 修改索引分区_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
    
73.2.3 重命名索引分区

执行如下命令对索引分区_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
73.2.4 查询索引
  • 执行如下命令查询系统和用户定义的所有索引。

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

    openGauss=# \di+ tpcds.tpcds_web_returns_p2_index2 
    
73.2.5 删除索引
openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index1;
openGauss=# DROP INDEX tpcds.tpcds_web_returns_p2_index2;

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

DROP INDEX
73.2.6 创建索引的方式

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

img 说明:

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

表 1 索引方式

索引方式描述
唯一索引可用于约束索引属性值的唯一性,或者属性组合值的唯一性。如果一个表声明了唯一约束或者主键,则openGauss自动在组成主键或唯一约束的字段上创建唯一索引(可能是多字段索引),以实现这些约束。目前,openGauss只有B-Tree可以创建唯一索引。
多字段索引一个索引可以定义在表中的多个属性上。目前,openGauss中的B-Tree支持多字段索引,且最多可在32个字段上创建索引(全局分区索引最多支持31个字段)。
部分索引建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。
表达式索引索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。
  • 创建一个普通表
openGauss=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
INSERT 0 0
73.2.6.1 创建普通索引

如果对于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
73.2.6.2 创建多字段索引

假如用户需要经常查询表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
73.2.6.3 创建部分索引

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

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

假如经常需要查询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
    

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/138223.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国家开放大学 考试试题训练

经济数学基础 参考 试题 导数基本公式&#xff1a; 积分基本公式&#xff1a; c0 ∫0dxc xaaxa-1 ∫xadxxa1a1c&#xff08;a≠-1&#xff09; axaxlna(a>0且a≠1) …

【R语言】完美解决devtools安装GitHub包失败的问题(以gwasglue为例)

Rstudio&#xff0c;R4.3.1&#xff0c;命令在Rstudio的命令行即console中运行。 文章目录 一、问题复述二、分析三、解决四、安装示例&#xff1a;gwasglue 一、问题复述 使用devtools安装一个github的包。 devtools&#xff1a; devtools 是 R 语言中一个非常有用的包&…

VS2019创建GIt仓库时剔除文件或目录

假设本地有解决方案“SomeSolution” 1、首先”团队资源管理器“-“创建Git存储库”&#xff0c;选择“仅限本地”、“创建” VS会在解决方案目录下自动生成.gitattributes、.gitignore 2、编辑gitignore&#xff0c;直接拖到VS里或者用记事本打开。添加要剔除的文件或文件夹…

java面向对象(九)

文章目录 一、abstract的应用举例二、接口的使用1.概念2.代码案例 三、try-catch-finally使用步骤1.注意点2.finally注意点 四、异常处理的方式二&#xff1a;throws 异常类型1.如图所示&#xff1a;2.代码如下&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0…

2021年电工杯数学建模A题高铁牵引供电系统运行数据分析及等值建模求解全过程论文及程序

2021年电工杯数学建模 A题 高铁牵引供电系统运行数据分析及等值建模 原题再现&#xff1a; 我国是世界上电气化铁路运营里程最长、服役电力机车型号最多、运营最繁忙的国家。截至 2020 年底&#xff0c;我国铁路年消耗电量约 800 亿千瓦时&#xff0c;约占三峡年总发电量的 8…

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 ​登录功能完善 导入接口文档 使用swagger​ 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…

工具篇 | Gradle入门与使用指南

介绍 1.1 什么是Gradle&#xff1f; Gradle是一个开源构建自动化工具&#xff0c;专为大型项目设计。它基于DSL&#xff08;领域特定语言&#xff09;编写&#xff0c;该语言是用Groovy编写的&#xff0c;使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

【Redis】深入探索 Redis 的哨兵(Sentinel)机制原理,基于 Docker 模拟搭建 Redis 主从结构和哨兵分布式架构

文章目录 一、对 Redis Sentinel 的认识1.1 什么是 Redis Sentinel1.2 为什么要使用 Redis Sentinel1.2.1 主从复制问题1.2.2 人工恢复主节点故障 二、Redis Sentinel 原理剖析2.1 Redis Sentinel 架构2.2 Raft 算法和领袖节点2.3 哨兵节点2.4 故障检测2.5 故障切换2.6 监控和通…

利用大模型知识图谱技术,告别繁重文案,实现非结构化数据高效管理

我&#xff0c;作为一名产品经理&#xff0c;对文案工作可以说是又爱又恨&#xff0c;爱的是文档作为嘴替&#xff0c;可以事事展开揉碎讲清道明&#xff1b;恨的是只有一个脑子一双手&#xff0c;想一边澄清需求一边推广宣传一边发布版本一边申报认证实在是分身乏术&#xff0…

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;优化损失函数 3. 模型训练及保存1&#xff09;模型训练2&#xff09;模型保存 4. 模型应用1&#xff09;制作页面2&#xff09;模型导入及调用3&am…

zabbix监控多实例redis

Zabbix监控多实例Redis 软件名称软件版本Zabbix Server6.0.17Zabbix Agent5.4.1Redis6.2.10 Zabbix客户端配置 编辑自动发现脚本 vim /usr/local/zabbix/scripts/redis_discovery.sh #!/bin/bash #Fucation:redis low-level discovery #Script_name redis_discovery.sh red…

【操作系统】实验一 Linux初步

文章目录 Linux初步一、实验目的二、实验内容 Linux初步 一、实验目的 通过proc文件系统观察整个Linux内核和系统的一些重要特征&#xff0c;并编写一个程序&#xff0c;使用proc文件系统获得以及修改系统的各种配置参数。 本实验需要学生具有Linux的基本操作技能&#xff0c…

Rust常见编程概念

变量和可变性 rust使用let声明变量&#xff0c;变量默认是不可改变的。通过在let后面加上mut&#xff0c;可以声明可变变量。可以在变量名后加:和类型名&#xff0c;来显式声明变量类型&#xff0c;例如&#xff1a; let a:u32 1; 常量 常量使用const声明&#xff0c;变量名…

【Tricks】关于如何防止edge浏览器偷取chrome浏览器的账号

《关于如何防止edge浏览器偷取chrome浏览器的账号》 前段时间edge自动更新了&#xff0c;我并没有太在意界面的问题。但是由于我使用同一个网站平台时&#xff0c;例如b站&#xff0c;甚至是邮箱&#xff0c;edge的账号和chrome的账号会自动同步&#xff0c;这就导致我很难短时…

Centos7部署gitlab

建议服务器配置不低于2C8G 1、安装必要的依赖 sudo yum install -y curl policycoreutils-python openssh-server perl2、配置极狐GitLab 软件源镜像 curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash sudo yum install gitlab-jh -y3、…

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…

【计算机网络】IP协议第一讲(协议格式介绍)

IP协议 1.协议头格式1.1 概念介绍1.2补充说明1.2.1 8位生存时间---TTL1.2.2 16位首部检验和 首先明确一个概念&#xff1a;TCP/IP协议是配合使用的&#xff0c;TCP负责可靠传输策略&#xff0c;IP则是负责传输&#xff0c;TCP协议是位于传输层提供的是策略解决可靠性问题&#…

pytest一些常见的插件

Pytest拥有丰富的插件架构&#xff0c;超过800个以上的外部插件和活跃的社区&#xff0c;在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址&#xff1a;http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…

【操作系统】聊聊什么是CPU上下文切换

对于linux来说&#xff0c;本身就是一个多任务运行的操作系统&#xff0c;运行远大于CPU核心数的程序&#xff0c;从用户视角来看是并发执行&#xff0c;而在CPU视角看其实是将不同的CPU时间片进行分割&#xff0c;每个程序执行一下&#xff0c;就切换到别的程序执行。那么这个…