首页 > 其他分享 >关于openGauss中的虚拟索引

关于openGauss中的虚拟索引

时间:2024-04-01 14:45:31浏览次数:30  
标签:omm 索引 虚拟 hypopg openGauss enmotech

关于 openGauss 中的虚拟索引
作为曾经的 Oracle 资深使用者,对于 Oracle 11gR2 版本推出的 invisible Index 感觉一直很良好;因为这对于大部分情况下做优化是比较友好的。实际上 openGauss2.0 版本中也提供了类似的功能,下面我们来进行简单测试。首先我们创建一个测试表用来验证 openGauss 的虚拟索引功能:

enmotech=# create table test as select * from pg_settings;

INSERT 0 637
enmotech=# select count(1) from test;
count

637
(1 row)
openGauss 中对于虚拟索引的创建,需要借助相关函数来实现,如下:

enmotech=# select * from hypopg_create_index('create index on test(name)');
indexrelid | indexname
------------+-------------------------
24643 | <24643>ubtree_test_name
(1 row)

enmotech=# set enable_hypo_index = on;
SET
enmotech=#
通过 hypopg_create_index 创建了基于 test(name)的虚拟索引之后,我们打开会话级参数,让优化器能够识别索引。

接下来验证一下索引是否能够起作用:

enmotech=# explain select name,setting from test where name='checkpoint_timeout';
QUERY PLAN

Index Scan using <24643>ubtree_test_name on test (cost=0.00..8.27 rows=1 width=64)
Index Cond: (name = 'checkpoint_timeout'::text)
(2 rows)

enmotech=#
可以看到通过 explain 的结果来看,该查询语句能够使用 Index scan,用到我们所创建的虚拟索引 16395.

那么对于虚拟索引,是否会分配空间,占据文件系统大小呢?同样也可以使用 openGauss 提供的相关函数进行查询:

enmotech=# select * from hypopg_estimate_size(24643);
hypopg_estimate_size

8192
(1 row)

enmotech=#
除此之后还提供了一些其他的函数:

hypopg_reset_index 清除所有虚拟索引

hypopg_drop_index 删除某个虚拟索引

hypopg_display_index 查看所有创建的虚拟索引

enmotech=# select * from hypopg_estimate_size(24643);
hypopg_estimate_size

8192
(1 row)

enmotech=#
虚拟索引创建后,属于实例级别、会话级别(其他会话也可以共享)。如果我们没有手工进行删除或者清除操作;那么当重启数据库实例之后,openGauss 会自动删除所有的虚拟索引。

这里我们重启了 openGauss 集群之后,再登录数据库查看是否是这样:

enmotech=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
enmotech | roger | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/omm +
| | | | | omm=CTc/omm
template1 | omm | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/omm +
| | | | | omm=CTc/omm
(4 rows)

enmotech=# select * from hypopg_display_index();
indexname | indexrelid | table | column
-----------+------------+-------+--------
(0 rows)

可以看到,openGauss 实例重启之后,之前所创建的虚拟索引自动被清除。这实际上也 openGauss AI 功能方面的一个小点。非常赞!

标签:omm,索引,虚拟,hypopg,openGauss,enmotech
From: https://www.cnblogs.com/helloopenGauss/p/18108370

相关文章

  • openGauss关于PL/SQL匿名块调用测试
    openGauss关于PL/SQL匿名块调用测试一、原理介绍PL/SQL(ProcedureLanguage/StructureQueryLanguage)是标准SQL语言添加了过程化功能的一门程序设计语言。单一的SQL语句只能进行数据操作,没有流程控制,无法开发复杂的应用。PL/SQL语言是结合了结构化查询与数据库自身过......
  • openGauss数据库将磁盘表转换为MOT
    openGauss数据库将磁盘表转换为MOT一、将磁盘表转换为MOT方法磁盘表直接转换为MOT尚不能实现,这意味着尚不存在将基于磁盘的表转换为MOT的ALTERTABLE语句。目前MOT表也不支持rename,createasselect以及insertselect(普通表)的操作。将基于磁盘的表转换为MOT方......
  • MogDB/openGauss如何实现事务的rollback
    MogDB/openGauss如何实现事务的rollback本文出处:https://www.modb.pro/db/113262数据库最主要的功能就是存储数据,然而我们在进行数据库操作时,却很容易发生误操作数据的情况,那么在MogDB中该如何实现误操作数据恢复呢?本文通过具体示例简要介绍如何通过回滚还原到误操作前的状......
  • 问题:vmware虚拟机可以上网,但是和宿主机不能互ping。
    设备类型:vmware主机:kali宿主机:win10软件版本:vmware版本:VMware®Workstation17Provm设置:kali为nat模式问题描述:每次开机打开vm虚拟机kali。用xshell连接,都会连接不上。因为主机和vmkali不通。但是vmkali可以正常上网。检查了所有设置,服务,都正常。且vm相关服务为自启......
  • vsphere API 调用创建虚拟机
    1.版本介绍vsphere:vSphereClient版本7.0.3.01100VsphereAPI参考地址:vSphereWebServicesAPI-VMwareAPIExplorervsphereAPI github给的参考例子地址:pyvmomi-community-samples/samples/tools/service_instance.pyatmaster·vmware/pyvmomi-c......
  • 什么是Docker引擎架构,Docker引擎架构详解及Vmware,CentOS7、Docker引擎的安装,CentOS7常
    Dockere引擎架构详解2.1Docker引擎发展历程2.1.1首发版本架构       Docker在首次发布时,其引擎有两个核心组件构成,LXC(LinuxContainer)与DockerDaemon构成。不过该架构依赖于LXC,使得Docker存在严重的问题:依赖于外部工具对Docker来说存在着巨大的生存风险。......
  • openGauss每日一练第6天
    学习地址https://www.modb.pro/course/133学习目标学习openGauss创建模式、修改模式属性和删除模式模式是一组数据库对象的集合,主要用于控制对数据库对象的访问课后作业1.创建一个名为tpcds的模式SQL文本:createschematpcds;\dntpcdsomm=#createschematpcds;C......
  • MogDB/openGauss数据库package关键字的两种用法
    MogDB/openGauss数据库package关键字的两种用法本文出处:https://www.modb.pro/db/237701package关键字在MogDB数据库里有两种用法:package包,分为PackageSpecification和PackageBody。注意:需要在Oracle兼容下(dbcompatibility=‘A’)package属性,用于存储过程重......
  • 实例演示如何使用CCE XGPU虚拟化
    本文分享自华为云社区《CCEXGPU虚拟化的使用》,作者:可以交个朋友。一背景在互联网场景中,用户的AI训练和推理任务对GPU虚拟化有着强烈的诉求。GPU卡作为重要的计算资源不管是在算法训练还是预测上都不可或缺,而对于常见的算法训练业务或智能业务都有往容器迁移演进的趋势,所以如......
  • NumPy库中的ndarray对象——ndarray的切片和索引
    一、普通切片与索引ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,切片对象可以通过内置的slice函数,并设置start,stop及step参数进行,从原数组中切割出一个新数组。我们来介绍一下sta......