达梦(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://xiahunao.cn/news/2979433.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动

js生成不同的阅读数分配到每一篇上面,不会因为刷新而变动 {%- for article in blog.articles -%}<div class"blog-articles__article article">{%- render article-card,article: article,media_height: section.settings.image_height,media_aspect_ratio: a…

揭开ChatGPT面纱(1):准备工作(搭建开发环境运行OpenAI Demo)

文章目录 序言&#xff1a;探索人工智能的新篇章一、搭建开发环境二、编写并运行demo1.代码2.解析3.执行结果 本博客的gitlab仓库&#xff1a;地址&#xff0c;本博客对应01文件夹。 序言&#xff1a;探索人工智能的新篇章 随着人工智能技术的飞速发展&#xff0c;ChatGPT作为…

53、图论-课程表

思路&#xff1a; 其实就是图的拓扑排序&#xff0c;我们可以构建一个图形结构&#xff0c;比如[0,1]表示1->0&#xff0c;对于0来说入度为1。 遍历结束后&#xff0c;从入度为0的开始遍历。引文只有入度为0的节点没有先决条件。然后依次减少1。直到所有节点入度都为0.然后…

Python语言第三章之容器类型(list, tuple)

高级数据类型 Python中的数据类型可以分为&#xff1a;数字型&#xff08;基本数据类型&#xff09;和非数字型&#xff08;高级数据类型&#xff09; 数字型包含&#xff1a;整型int、浮点型float、布尔型bool、复数型complex非数字型包含&#xff1a;字符串str、列表list、…

在线测径仪的六类测头组合形式!哪种适合你?

在线测径仪&#xff0c;这一现代工业的精密仪器&#xff0c;犹如一位技艺高超的工匠&#xff0c;以其卓越的性能和精准度&#xff0c;为工业生产提供了坚实的保障。它的出现&#xff0c;不仅提高了生产效率&#xff0c;更保证了产品质量&#xff0c;为企业的可持续发展注入了强…

360在线翻译免费API

一、需求&#xff1a; 根据360在线翻译&#xff0c;获取免费API&#xff0c;并调用 二、主要步骤 1、请求 url url "https://fanyi.so.com/index/search" 2、传入信息 datas {"query": "桌子"} 3、请求头 headers {"pro": &…

【好书推荐7】《机器学习平台架构实战》

【好书推荐7】《机器学习平台架构实战》 写在最前面《机器学习平台架构实战》编辑推荐内容简介作者简介目  录前  言本书读者内容介绍充分利用本书下载示例代码文件下载彩色图像本书约定 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&…

wireshark RTP分析参数

主要看丢弃和Delta&#xff0c; 丢弃就是丢掉的udp包&#xff0c;所占的比率 Delta是当前udp包接收到的时间减去上一个udp包接收到的时间 根据载荷可以知道正确的delta应该是多少&#xff0c;比如G711A&#xff0c;ptime20&#xff0c;那么delta理论上应该趋近于20. 这里的de…

python合并不同文件夹相同文件名的文件

要求&#xff1a; 合并来自不同文件夹下相同csv文件&#xff0c;如&#xff1a; 三个文件夹均含有1.csv&#xff0c;2.csv&#xff0c;3.csv等等文件&#xff0c;现在对文件进行合并。思路&#xff1a;先创建一个文件名list&#xff0c;然后遍历。 python代码&#xff1a; da…

ubuntu下安装python模块 pip intall xxx报错

报错内容大概如下&#xff1a; WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection broken by NewConnectionError(<pip._vendor.urllib3.connection.HTTPSConnection object at 0x7f0fc68d6370>: Failed to establ…

不得不说,ArcGIS Pro的分析制图实在是太强大啦!

在大数据、信息化、智能化时代&#xff0c; ArcGIS Pro 高效、丰富的空间分析制图功能&#xff0c; 在数据管理与底图底数、空间分析辅助决策、实景模拟与成果制图等方面实在是太强大啦&#xff01; 这六大强力核心应用&#xff0c;在国土、地理、规划、测绘、自然资源管理、…

实用监控局域网上网记录的软件盘点,有你常用的吗?

人类步入信息时代的今天&#xff0c;企业监控和家庭网络的监控已经成为一项重要任务。无论是确保网络安全&#xff0c;还是监督员工或孩子的上网行为&#xff0c;监控局域网上网记录的软件扮演着至关重要的角色。 然而&#xff0c;在市场上有众多的监控软件可供选择&#xff0c…

C++/Qt 小知识记录5

工作中遇到的一些小问题&#xff0c;总结的小知识记录&#xff1a;C/Qt 小知识5 Windows下查看端口占用情况C调用Python三方库测试库有没有被加上的测试方法初始化使用Python的env环境&#xff0c;用Py_SetPythonHome设置GDAL相关的&#xff0c;需要把osgeo、rasterio的路径加入…

一款辅助应用助力盲人公交出行畅行无阻

在这个日新月异的时代&#xff0c;科技进步正以前所未有的速度改变着人们的生活方式&#xff0c;尤其是在提升特殊群体生活质量方面展现出巨大潜力。今日&#xff0c;我们将目光聚焦于盲人公交出行&#xff0c;探讨一款名叫蝙蝠避障的创新辅助应用如何以其实时避障与拍照识别功…

聊聊 Linux iowait

哈喽大家好&#xff0c;我是咸鱼。 我们在使用 top 命令来查看 Linux 系统整体 CPU 使用情况的时候&#xff0c;往往看的是下面这一列&#xff1a; %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 68.0 wa, 0.0 hi, 0.0 si, 0.0 st其中&#xff0c;man 手册解释 wa 表示 …

mac电脑搭建vue环境(上篇)

第一步&#xff1a;mac电脑要有homebrew&#xff0c;如何安装homebrew 点击下方 MAC安装homebrew-CSDN博客 第二步&#xff1a;homebrew安装node.js 第三步&#xff1a;安装npm 第四步&#xff1a;安装webpack 第五步&#xff1a;安装vue脚手架 第六步&#xff1a;可以在…

深入解析YOLOv2

深入解析YOLOv2 引言 目标检测是计算机视觉中的一个核心问题&#xff0c;它旨在识别图像中所有感兴趣的目标&#xff0c;并给出它们的类别和位置。近年来&#xff0c;随着深度学习技术的发展&#xff0c;目标检测领域取得了巨大的进步。YOLO&#xff08;You Only Look Once&a…

Python-VBA函数之旅-input函数

目录 一、input函数的常见应用场景&#xff1a; 二、input函数使用注意事项&#xff1a; 三、如何用好input函数&#xff1f; 1、input函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博…

Git命令行操作(本地操作)

入口 1、任意目录》鼠标右键》Open Git Bash here 2、桌面快捷方式 本地库初始化 在本地库项目文件夹执行命令:git init 验证是否执行成功 .git目录中存放的是本地库相关的子目录和文件,不要删除、修改 设置签名 1、形式 用户名:tom Email地址:GoodMorning@qq.com 2、作…

cdp集群主节点根目录磁盘扩容

查看挂载点 df -h可以看到&#xff0c;根目录容量只有37G&#xff0c;现在对根目录进行扩容 查看根目录挂载的磁盘大小 lsblk挂载磁盘名字为vda&#xff0c;磁盘容量有80G&#xff0c;现在磁盘使用量为vda下面三个分区vda1&#xff0c;vda2&#xff0c;vda3容量之和&#xf…