达梦(DM)数据库表索引

达梦DM数据库表索引

  • 表索引
    • 索引准则
      • 其他准则
    • 创建索引
      • 显式地创建索引
      • 其他创建索引语句
    • 使用索引
      • 重建索引
      • 删除索引

表索引

达梦数据库表索引相关内容比较多,常用的可能也就固定的一些,这里主要说一下常用的索引,从物理存储角度进行分类,可分为聚集索引和非聚集索引

非聚集索引(又称为二级索引、辅助索引):将二级索引列和聚集索引列共同存储在 B+ 树叶子节点上。如果查找非聚集索引键值或聚集索引键值可直接在 B+ 树中找到;如果查找索引键值以外的数据,则需要回到一级索引中进行查找。每一个表可以有多个非聚集索引。

下面举个例子说明一下,创建表并插入数据

--创建表格T1,并插入数据。
CREATE TABLE T1 (ID int,NAME varchar(20),DEPARTMENT varchar(20));
INSERT INTO T1 VALUES(1'Zhang San', 'A部');
INSERT INTO T1 VALUES(2'Li Si', 'B部');
INSERT INTO T1 VALUES(3'Wang Wu', 'C部');
INSERT INTO T1 VALUES(4'Chen Liu', 'D部');

查看表结构

SP_TABLEDEF('SYSDBA','T1');

在这里插入图片描述
创建索引后查看表结构

--创建聚集索引,索引键为ID。
CREATE CLUSTER INDEX C1 on T1(ID);
--创建非聚集索引,索引键为NAME。
CREATE INDEX S1 on T1(NAME);
SP_TABLEDEF('SYSDBA','T1');

在这里插入图片描述
使用聚集索引查找

--使用聚集索引进行查找
EXPLAIN SELECT * FROM  T1 WHERE ID=2;

在这里插入图片描述
使用非聚集索引查找

EXPLAIN SELECT ID FROM  T1 WHERE NAME='Wang Wu';

在这里插入图片描述
先使用非聚集索引进行查找,再通过非聚集索引关联上聚集索引进行二次查找

EXPLAIN SELECT * FROM  T1 WHERE NAME='Chen Liu';

在这里插入图片描述
一般情况下,在插入或装载了数据后,为表创建索引会更加有效率。如果在装载数据之前创建了一个或多个索引,那么在插入每行时 DM8 都必须更改和维护每个索引,使得插入效率降低

索引准则

包括以下准则:

  1. 如果需要经常地检索大表中的少量的行,就为查询键创建索引;
  2. 为了改善多个表的连接的性能,可为连接列创建索引;
  3. 主键和唯一键自动具有索引,在外键上很多情况下也创建索引;
  4. 小表不需要索引。
    索引列选取规则:
  5. 列中的值相对比较唯一 ;
  6. 取值范围大,适合建立索引;
  7. CLOB 和 TEXT 只能建立全文索引、BLOB 不能建立任何索引。

其他准则

如果查询中有多个字段组合定位,则不应为每个字段单独创建索引,而应该创建一个组合索引。当两个或多个字段都是等值查询时,组合索引中各个列的前后关系是无关紧要的。但是如果是非等值查询时,要想有效利用组合索引,则应该按等值字段在前,非等值字段在后的原则创建组合索引,查询时只能利用一个非等值的字段。
一个表可以有任意数量的索引。但是,索引越多,修改表数据的开销就越大,因此索引不是越多越好,而应该适当。

创建索引

显式地创建索引

可以用 CREATE INDEX 语句显式地创建索引

CREATE INDEX idx_deptid ON test1(dept_id);

在这里插入图片描述
创建索引时未指定表空间的话,默认与表在相同的表空间下
在这里插入图片描述
指定存储设置及表空间创建索引

--指定表空间
CREATE INDEX idx_user ON test1(user_name) STORAGE ( INITIAL 50, NEXT 50, ON TEST2023);

在这里插入图片描述
查看指定的表空间索引
在这里插入图片描述
说明:

如果表及其索引使用相同的表空间 能更方便地对数据库进行管理(如表空间或文件备份)或保证应用的可用性,因为所有有关的数据总是在一起联机。然而,将表及其索引放在不同的表空间(在不同磁盘上)产生的性能比放在相同的表空间更好,因为这样做减少了磁盘竞争。但是将表及其索引放在不同的表空间时,如果一个表上某索引所在的表空间脱机了,则涉及这张表的 SQL 语句可能由于执行计划仍旧需要使用被脱机的索引而不能成功执行。

其他创建索引语句

 --创建聚集索引
 CREATE CLUSTER INDEX clu_emp_name ON emp(ename);
 --创建唯一索引 STORAGE (ON users) 指定表空间,可以不加,默认与表在相同表空间
 CREATE UNIQUE INDEX dept_unique_index ON dept (dname) STORAGE (ON users);

聚集索引的约束条件:

每张表中只允许有一个聚集索引,如果之前已经指定过 CLUSTER INDEX 或者指定了 CLUSTER PK,则用户新建立 CLUSTER INDEX 时系统会自动删除原先的聚集索引。但如果新建聚集索引时指定的创建方式(列,顺序)和之前的聚集索引一样,则会报错;
指定 CLUSTER INDEX 操作需要重建表上的所有索引,包括 PK 索引;
删除聚集索引时,缺省以 ROWID 排序,自动重建所有索引;
若聚集索引是默认的 ROWID 索引,不允许删除;
聚集索引不能应用到函数索引中;
不能在列存储表上新建/删除聚集索引;
建聚集索引语句不能含有 partition_clause 子句;
在临时表上增删索引会使当前会话上临时 b 树数据丢失;
不支持在含有多媒体类型的表上新建聚集索引。
--创建基于函数的索引
CREATE INDEX idx ON example_tab(column_a + column_b);
SELECT * FROM example_tab WHERE column_a + column_b < 10;

该索引是建立在 column_a + column_b 之上的,所以优化器可以为该查询使用范围扫描。优化器根据该索引计算查询代价,如果代价最少,优化器就会选择该函数索引,column_a + column_b 就不会重复计算
函数索引约束条件:参考文档

表达式不允许为时间间隔类型;

表达式中不允许出现半透明加密列;

函数索引表达式的长度理论值不能超过 816 个字符(包括生成后的指令和字符串);

函数索引不能为 CLUSTER 或 PRIMARY KEY 类型;

表达式不支持集函数和不确定函数,不确定函数为每次执行得到的结果不确定,系统中不确定函数包括:RAND、SOUNDEX、CURDATE、CURTIME、CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、GETDATE、NOW、SYSDATE、CUR_DATABASE、DBID、EXTENT、PAGE、SESSID、UID、USER、VSIZE、SET_TABLE_OPTION、SET_INDEX_OPTION、UNLOCK_LOGIN、CHECK_LOGIN、GET_AUDIT、CFALGORITHMSENCRYPT、SF_MAC_LABEL_TO_CHAR、CFALGORITHMSDECRYPT、BFALGORITHMSENCRYPT、SF_MAC_LABEL_FROM_CHAR、BFALGORITHMSDECRYPT、SF_MAC_LABEL_CMP;

快速装载不支持含有函数索引的表;

若函数索引中要使用用户自定义的函数,则函数必须是指定了 DETERMINISTIC 属性的确定性函数;

若函数索引中使用的确定性函数发生了变更或删除,用户需手动重建函数索引;

若函数索引中使用的确定性函数内有不确定因素,会导致前后计算结果不同的情况。在查询使用函数索引时,使用数据插入函数索引时的计算结果为 KEY 值;修改时可能会导致在使用函数索引过程中出现根据聚集索引无法在函数索引中找到相应记录的情况,对此进行报错处理;

临时表不支持函数索引。

创建位图索引以及创建位图连接索引也可参考上述文档,这里不怎么用到,不再详解。

使用索引

创建测试表

CREATE TABLE T2 (ID int,NAME varchar(20),DEPARTMENT varchar(20),SALARY INT);
CREATE CLUSTER INDEX S21 on T2(ID); //聚集索引
CREATE INDEX S22 on T2(NAME,DEPARTMENT);
CREATE INDEX S23 on T2(NAME);
CREATE INDEX S24 on T2(DEPARTMENT);
CREATE INDEX S25 on T2(SALARY);

使用聚集索引S21查询

EXPLAIN SELECT SALARY FROM T2 WHERE ID=10;

在这里插入图片描述
使用非聚集索引S22查询

EXPLAIN SELECT DEPARTMENT FROM T2 WHERE NAME='Zhang San';

在这里插入图片描述
先使用非聚集索引S23再使用聚集索引

EXPLAIN SELECT * FROM T2 WHERE NAME='Zhang San';

在这里插入图片描述
首先,在 SSEK 中使用 S23 非聚集索引进行扫描定位,得到 NAME;
其次,因为 SELECT * 中查询项太多,需要在 BLKUP2 中通过 S23 回到聚集索引上进行二次查找,得到*中的其它数据。

重建索引

当一个表经过大量的增删改操作后,表的数据在物理文件中可能存在大量碎片,从而影响访问速度。另外,当删除表的大量数据后,若不再对表执行插入操作,索引所处的段可能占用了大量并不使用的簇,从而浪费了存储空间。
可以使用重建索引来对索引的数据进行重组,使数据更加紧凑,并释放不需要的空间,从而提高访问效率和空间效率

--SCHEAM_NAME 为索引所在的模式名,INDEX_ID 为索引 ID
SP_REBUILD_INDEX(SCHEMA_NAME varchar(256), INDEX_ID int);
--  SP_REBUILD_INDEX('SYSDBA', 1547892);

删除索引

删除索引操作

DROP INDEX emp_ename;
--删除不存在的索引会报错。若指定 IF EXISTS 关键字,删除不存在的索引,不会报错
DROP INDEX IF EXISTS emp_ename;

不能直接删除与已启用的 UNIQUE KEY 键或 PRIMARY KEY 键约束相关的索引。要删除一个与约束相关的索引,必须停用或删除该约束本身。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

B008-方法参数传递可变参数工具类

目录 方法参数传递可变参数冒泡排序Arrays工具类Arrays工具类常用方法 方法参数传递 /*** java中只有值传递* 基本数据类型 传递的是具体的值* 引用数据类型 传递的是地址值*/ public class _01_ParamPass {public static void main(String[] args) {// 调用方法 getSumge…

网络变压器在网络分析仪上能通过测试,装上设备后网速达不到呢?

Hqst华轩盛(石门盈盛)电子导读&#xff1a;今天和大家一起探讨网络变压器在网络分析仪上能通过测试&#xff0c;装上设备后网通设备网速达不到的可能原因及其处理方式 一、出现这种情况可能有以下原因&#xff1a; 1.1. 设备兼容性问题&#xff1a;设备其它元器件与 网络…

Docker容器化技术:概述与安装

目录 一、云基础知识 1、常见的云服务厂商 2、云计算服务模式三种层次 3、什么是虚拟化 4、什么是虚拟机 5、虚拟化产品 5.1 仿真虚拟化产品 5.2 半虚拟化产品 5.3 全虚拟化产品 6、虚拟机架构 6.1 寄居架构 6.2 源生架构 二、认识容器 1、容器的概述 2、容器的…

【Netty】ByteBuf与拆包粘包

ByteBuf 在介绍ByteBuf之前先来一套基础的代码来演示ByteBuf的使用。 package blossom.project.netty;import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled;import java.nio.charset.StandardCharsets;/*** author: ZhangBlossom* date: 2023/12/14 13:37* con…

web学习

day02-01 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>js快速引入</title> <!-- 内部脚本--> <!-- <script>--> <!-- alert(Hello JS)--> <!-- <…

【linux】匿名管道|进程池

1.进程为什么要通信&#xff1f; 进程也是需要某种协同的&#xff0c;所以如何协同的前提条件(通信) 通信数据的类别&#xff1a; 1.通知就绪的 2.单纯的数据 3.控制相关的信息 2.进程如何通信&#xff1f; 进程间通信&#xff0c;成本会高一点 进程间通信的前提&#xff0c;先…

制氢机远程监控运维方案

制氢机远程监控运维方案 在当今能源转型的大背景下&#xff0c;氢能作为清洁、高效且可再生的能源载体&#xff0c;其重要性日益凸显。而制氢机作为氢能产业链中的关键设备&#xff0c;其稳定运行与高效运维对于保障氢气供应、推动氢能产业健康发展至关重要。在此背景下&#…

动态规划——切割钢条问题

一、动态规划 动态规划算法通常用于解决最优化问题&#xff08;寻求最优解&#xff09;。其思想与分治法类似&#xff0c;将待求解的问题分成若干个子问题&#xff0c;先求出子问题&#xff0c;再根据子问题的解求出原来问题中的解&#xff0c;与分支法不同的是&#xff0c;在动…

Oracle使用内部包自定义创建表空间和用户

如果之前有类似的表空间,可以使用dbms自动生成对应的表空间和数据文件 select dbms_metadata.get_ddl(TABLESPACE,ts.tablespace_name) from dba_tablespaces ts; 可以使用类似的 SQL> set echo off SQL> spool /data/logs/create_tablespace.log SQL> select dbms…

Mimics21软件学习总结

一. Mimics21软件安装过程 ① 解压下载好的Mimics软件包&#xff1b; ② 双击“MIS_Medical_21.0.exe”打开等待安装程序初始化完成&#xff1b; ③ 进入安装向导点击“next”&#xff1b; ④ 点击选择“Iaccept the agreement”同意相关协议&#xff0c;随后点击“next”&…

多模态大模型训练数据以及微调数据格式

多模态数据&#xff0c;尤其是中文多模态数据&#xff0c;找一些中文多模态的数据 中文多模态数据集汇总_数据集-阿里云天池本文整理汇总了业界常用的多模态中文数据集&#xff0c;提供了每个数据集的简介、官网、下载地址、Github代码等信息&#xff0c;方便算法研究人员学习…

虚假新闻检测——Adapting Fake News Detection to the Era of Large Language Models

论文地址&#xff1a;https://arxiv.org/abs/2311.04917 1.概论 尽管大量的研究致力于虚假新闻检测&#xff0c;这些研究普遍存在两大局限性&#xff1a;其一&#xff0c;它们往往默认所有新闻文本均出自人类之手&#xff0c;忽略了机器深度改写乃至生成的真实新闻日益增长的现…

Etsy多账号关联怎么办?Etsy店铺防关联解决方法

Etsy虽然相对于其他跨境电商平台来说比较小众&#xff0c;但因为平台是以卖手工艺品为主的&#xff0c;所以成本较低&#xff0c;利润很高。许多跨境卖家都纷纷入驻&#xff0c;导致平台规则越发严格&#xff0c;操作不当就会封号&#xff0c;比如一个卖家操作多个账号会出现关…

国外问卷调查如何做?需要借助海外住宅IP吗?

在数字化时代&#xff0c;国外问卷调查不仅是了解市场需求的重要手段&#xff0c;还成为了一项能够赚取额外收入的方式。随着全球范围内消费者行为的多样化&#xff0c;各类企业和机构越来越需要了解不同地区的用户观点和偏好&#xff0c;以优化产品和服务。 一、国外问卷调查…

Flask中的JWT认证构建安全的用户身份验证系统

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask中的JWT认证&#xff1a;构建安全的用户身份验证系统 随着Web应用程序的发展&#xf…

Linux给磁盘扩容(LVM方式)

Linux给磁盘扩容&#xff08;LVM方式&#xff09; 最近测试性能&#xff0c;在本地打数据时&#xff0c;发现磁盘空间不足&#xff0c;于是想手动给/挂载点添加空间。这里介绍通过LVM方式快速给磁盘扩容。 LVM:是一种技术&#xff0c;方便管理磁盘。如果不用LVM&#xff0c;那…

js的算法-交换排序(快速排序)

快速排序 基本思想 快速排序的基本思想是基于分治法的&#xff1a;在待排序表L【1...n】中任意取一个元素p 作为枢轴&#xff08;或基准&#xff0c;通常取首元素&#xff09;。通过一趟排序将待排序表划分为独立的两部分L【1...k-1】和L【k1...n】;这样的话&#xff0c;L【1…

Linux下的基本指令

基本指令 前言ls 指令语法功能常用选项举例注意关于拼接关于 -a关于文件ls与/的联用ls与根目录ls与任意文件夹ls与常用选项与路径 pwd命令语法功能常用选项注意window与Linux文件路径的区别 cd 指令语法功能举例注意cd路径... touch指令语法功能常用选项 mkdir指令语法功能常用…

【RAG 论文】Query2doc — 使用 LLM 做 Query Expansion 来提高信息检索能力

论文&#xff1a;Query2doc: Query Expansion with Large Language Models ⭐⭐⭐⭐⭐ Microsoft Research, EMNLP 2023 文章目录 背景介绍Query2doc 论文速读实现细节实验结果和分析总结分析 背景介绍 信息检索&#xff08;Information Retrieval&#xff0c;IR&#xff09;指…

如何操作HTTP返回头-ApiHug小技巧-002

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace &…