达梦(DM)数据库表索引

news2025/1/16 14:49:44

达梦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.coloradmin.cn/o/1617820.html

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

相关文章

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡

【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡 配置ssh远程连接docker1.端口映射2.配置ssh 在docker中使用nvidia显卡配置CUDA 注意&#xff1a;之前已经创建过容器的&#xff0c;需要打包成镜像&#xff0c;重新创建容器&#xff0c;因为要在创建…

# IDEA2019 如何打开 Run Dashboard 运行仪表面板

IDEA2019 如何打开 Run Dashboard 运行仪表面板 段子手168 1、依次点击 IDEA 上面工具栏 —> 【View】 视图。 —> 【Tool Windows】 工具。 —> 【Run Dashboard】 运行仪表面板。 2、如果 【Tool Windows 】工具包 没有 【Run Dashboard】 运行仪表面板 项 依次…

uniapp制作多选下拉框和富文本(短信页面)

实例 多选下拉框实现 http://t.csdnimg.cn/TNmcF 富文本实现 http://t.csdnimg.cn/Ei1iV

网络带宽相关

1.tcp重传率计算 watch -n 5 “cat /proc/net/snmp” 如下博客所讲 https://blog.csdn.net/michaelwoshi/article/details/121189743 2.iperf测试网络带宽 #客户端 #tcp iperf -c 服务端ip -P 4 -b 200M #udp iperf -c 服务端ip -u -P 4 -b 1000M -l 10K #服务端 iperf -s

OPTEE的GDB调试技术实战

【按语】&#xff1a;如果需要调试OPTEE&#xff0c;那么在远程调试配置中使用GDB可能会很有用。远程调试意味着GDB在您的PC上运行&#xff0c;它可以访问源代码&#xff0c;而被调试的程序在远程系统上运行(在本例中&#xff0c;在QEMU环境的OPTEE中)。本博客来探讨OPTEE的GDB…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

算法竞赛相关问题总结记录

前言 日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力&#xff0c;也能够增加自己的生活费&#xff0c;竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大&…

区块链钱包开发指南: 探究区块链钱包开发涉及

区块链钱包是连接用户与区块链网络的重要工具&#xff0c;它们不仅提供了安全的存储和管理数字资产的功能&#xff0c;还允许用户进行交易和与区块链上的智能合约进行互动。本文将探究区块链钱包开发涉及的关键方面和技术要点。 1. 区块链钱包类型 区块链钱包可以分为以下几种…

Android Studio查看viewtree

前言&#xff1a;之前开发过程一直看的是手机上开发者选项中的显示布局边界&#xff0c;开关状态需要手动来回切换&#xff0c;今天偶然在Android Studio中弄出了布局树觉得挺方便的。

汽车纵染压制专用液压机比例阀放大器

汽车纵染压制专用液压机比例阀放大器是一种专门用于汽车纵梁拉伸工艺的设备&#xff0c;它也可以用于其他金属薄板的压制成型及校正工艺。该类型的液压机通常具备独立的动力机构和电气系统&#xff0c;采用PLC技术进行控制&#xff0c;以确保操作的准确性和稳定性。除了纵梁拉伸…

文心一言 VS 讯飞星火 VS chatgpt (243)-- 算法导论18.1 1题

一、B树中为什么不允许最小度数 t1&#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在B树中不允许最小度数 t1 的主要原因在于这样会导致树的结构退化为链表&#xff0c;失去了B树作为平衡多路搜索树的优势。当 t1 时&#xff0c;每个非根节点将只能…

openGauss学习笔记-269 openGauss性能调优-TPCC性能调优测试指导-数据库服务端及客户端绑核

文章目录 openGauss学习笔记-269 openGauss性能调优-TPCC性能调优测试指导-数据库服务端及客户端绑核269.1 安装openGauss数据库269.2 停止数据库269.3 使用gs_guc工具修改数据库端口、IP等269.4 使用gs_guc工具设置如下参数269.5 执行如下命令以绑核方式启动服务端数据库269.6…

在线教程丨刘强东数字人首秀交易额破5千万!用GeneFace++ 生成实时说话数字人

近日&#xff0c;京东创始人刘强东化身「采销东哥 AI 数字人」&#xff0c;在京东家电家居和超市的采销直播间开启了自己的直播首秀。此次直播活动观看人次超 2 千万&#xff0c;交易总额超 5 千万&#xff0c;充分彰显了AI 数字人在电商直播领域的巨大潜力。 「采销东哥」亮相…

SwiftUI 5.0(iOS 17.0)触摸反馈“震荡波”与触发器模式趣谈

概览 要想创作出一款精彩绝伦的 App&#xff0c;绚丽的界面和灵动的动画并不是唯一吸引用户的要素。有时我们还希望让用户真切的感受到操作引发的触觉反馈&#xff0c;直击使用者的灵魂。 所幸的是新版 SwiftUI 原生提供了实现触觉震动反馈的机制。在介绍它之后我们还将进一步…

prompt提示词:小红书爆款标题提示词,让AI 帮你生成吸睛的标题

目录 小红书爆款标题提示词效果展示&#xff1a;提示词&#xff1a; 小红书爆款标题提示词 一篇文章若缺少了吸引人的标题&#xff0c;就如同失去了灵魂的躯壳&#xff0c;失去了与读者心灵相通的桥梁&#xff0c;上次发表了一篇小红书爆款文案生成助手 提示词&#xff0c;大家…

Linux之安装Nginx

目录 传送门前言一、快速安装二、反向代理语法1、基本语法2、location语法1. 基本语法2. 匹配规则3. 修饰符4. 权重5. 嵌套location6. 其他指令7.案例 三、配置反向代理 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff0…

食用油5G智能工厂数字孪生可视化平台,推进食品制造业数字化转型

食用油5G智能工厂数字孪生可视化平台&#xff0c;推进食品制造业数字化转型。在食用油产业中&#xff0c;数字化转型已成为提升生产效率、优化供应链管理、确保产品质量和满足消费者需求的关键。食用油5G智能工厂数字孪生可视化平台作为这一转型的重要工具&#xff0c;正在推动…

【来自理工科的独有浪漫-给crush一朵夏天的雪花】--对于有限差分法的理解

目录 有限差分法相关参考资料先上手看代码&#xff0c;然后理解数理概念有限差分法的理解Q: 什么是有限差分法&#xff1f; 代码中涉及的知识点1. 划分网格对于求解二维偏微分方程的作用2. 临近点对于求解偏微分方程的作用3. 有限差分方法中的中心差分公式 总结 写在前面&#…

喜报 | 一致认可!擎创科技连续6年获“鑫智奖”专家推荐TOP10优秀解决方案

为展示金融企业数据管理和数据平台智能化转型成果&#xff0c;分享大数据和人工智能在风控、营销、产品、运营等场景的落地实践&#xff0c;探讨“金融科技数据智能”的创新应用和未来发展&#xff0c;在全球金融专业人士协会的支持下&#xff0c;金科创新社主办了“鑫智奖第六…