达梦数据库 索引管理

news2024/11/16 9:43:50

索引的基本认识

索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识(例如:ROWID 等聚集索引键)共同组成。在 DM 中,除了位图索引、位图连接索引、全文索引和空间索引外,索引数据都采用 B+ 树结构进行存储,在 DM 手册的其余地方都简称为 B 树。索引也是占存储空间,所以我们需要将索引存储在专属的表空间中。

解析:


所有的数据页存放在叶子节点
深度比较小 访问层次不多
需要找的数据全部在叶子节点
叶子节点是双向链表 访问一个节点,就能访问到所有节点
叶子节点上不是一个数据,是一个PAGE,每个页默认大小16K
在这里插入图片描述
用户自己建立的索引 二级索引
在这里插入图片描述


索引相当于一本书的目录,根据目录中的页码标识快速检索并定位到的查找内容。

达梦默认的是索引组织表,当建表语句未指定聚簇索引键,DM 的默认的聚簇索引是 rowid,即记录默认以 rowid 在表中排序。

DM 提供三种方式供用户指定聚簇索引:
1、cluster primary key
2、Cluster key
3、Cluster unique key

DM8 索引:
1、聚簇索引:每一个索引组织表有且只有一个聚簇索引
2、唯一索引:保证表上的不会有两行数据具有相同的值. 3、函数索引:包含函数表达式的预先计算的值。
4、位图索引:列上的值的类型少
5、复合索引:表中两个或两个以上的列一起建立索引
6、全文索引:在表中文本列上建索引. 7、分区索引:

优点:
大大加快数据的检索速度
加速表和表之间的连接

缺点:
索引需要占物理空间
表中的数据进行DML操作时,增加数据库维护成本

聚集索引

DM8 中表(列存储表和堆表除外)都是使用 B 树索引结构管理的,每一个普通表都有且
仅有一个聚集索引,数据都通过聚集索引键排序,根据聚集索引键可以快速查询任何记录。
当建表语句未指定聚集索引键时,DM8 的默认聚集索引键是 ROWID。若指定索引键,表
中数据都会根据指定索引键排序。
建表后,DM8 也可以用创建新聚集索引的方式来重建表数据,并按新的聚集索引排序。

CREATE CLUSTER INDEX T1_CLUSTER ON T1(ID);

注意:
新建聚集索引会重建这个表以及其所有索引,包括二级索引、函数索引,是一个代价非
常大的操作。因此,最好在建表时就确定聚集索引键,或在表中数据比较少时新建聚集索引,
而尽量不要对数据量非常大的表建立聚集索引。

唯一索引

create tablespace "IND" datafile 'C:\Users\Admin\Desktop\DM\IND' size 32 CACHE = NORMAL;

create table SYSDBA.T1(id int ,name varchar(20));
create unique index SYSDBA.T1_ind on SYSDBA.T1(id) tablespace IND;
select owner,index_name,index_type,table_name from dba_indexes where table_name='T1';

在这里插入图片描述
DM8 创建 UNIQUE KEY 或 PRIMARY KEY 约束时,DM8 会隐式地自动创建唯一索引。
主键和唯一索引有什么不同:
1、主键是一个约束,唯一索引是一种索引
2、主键创建后包含唯一索引,唯一索引不一定是主键
3、一个表只能有一个主键,但是可以有多个唯一索引。
4、主键不能为 null, 唯一索引可以有多个 null 值
5、主键可以作为外键,唯一索引不可以。

函数索引

正确使用函数索引,可以带来以下好处:

  1. 创建更强有力的分类,例如可以用 UPPER 和 LOWER 函数执行区分大小写的分类;
  2. 预先计算出计算密集的函数的值,并在索引中将其分类。可以在索引中存储要经常
    访问的计算密集的函数,当需要访问值时,该值已经计算出来了。因此,极大地改
    善了查询的执行性能;
  3. 增加了优化器执行范围扫描而不是全表扫描的情况的数量。
create table SYSDBA.emp as select * from dmhr.employee;
explain select employee_name, email from SYSDBA.emp where
upper(email)=upper('maxueming@dameng.com');

在这里插入图片描述

create index SYSDBA.ind_emp on SYSDBA.emp(upper(email)) tablespace IND;
explain select employee_name, email from SYSDBA.emp where
upper(email)=upper('maxueming@dameng.com');

在这里插入图片描述
单行函数:
字符: initcap lower upper lpad trim replace instr substr
数值运算:round trunc mod
日期: add_months month_between, next_day, last_day
SELECT DATE_ADD(sysdate,INTERVAL '2 1 ’ DAY TO SECOND);

复合索引

复合索引是由表中的多列构成,注意先后顺序
比如 where 条件使用得比较多的列,做前导列。

explain select employee_id,employee_name from sysdba.emp where employee_id=1001;

在这里插入图片描述

create index sysdba.emp_ind2 on sysdba.emp(employee_id,employee_name)
tablespace IND;
explain select employee_id,employee_name from sysdba.emp where employee_id=1001;

在这里插入图片描述

explain select employee_id from sysdba.emp where employee_name='马刚红';

在这里插入图片描述

explain select employee_id,employee_name from sysdba.emp where employee_id=1001 and employee_name='马刚红';

在这里插入图片描述

总结:
在复合索引中,单独使用前导列(第一列)优化器会走二级索引数据
定位 SSEK2,如果同时使用复合索引字段,优化器会走二级索引数据
定位 SSEK2。
如果单独使用非前导列,优化器走二级索引 SSCN 或是 CSCN2

索引在查询语句里面是否会用到和 sql 编写相关。包括索引的扫描方式,都会根据表中的列值分布,统计信息,过滤字段的不同而不同

位图索引

(1)用一个位来表示一个索引的键值,节省了存储空间
(2)对于 and ,or 或=的查询条件,位图索引查询效率高,善于处理
0,1 数据。
适合列上数值类型少的情况,比如说性别。位图索引适合 OLAP 环境。
对于 OLTP 环境位图索引基本上不适用的。
不合适:
1、频繁进行插入或更新的表。
2、列值很多,可选范围很大的表。

索引的维护

重建索引

Alter index sysdba.emp_ind2 rebuild;
Alter index sysdba.emp_ind2 rebuild online;

删除索引:

DROP INDEX  sysdba.emp_ind2;

查看索引的相关信息
DBA_INDEXES, USER_INDEXES, SYSOBJECTS

有时候索引建立得不好,会使得性能变得慢,所以需要建立合适的索引。

注意:收集统计信息,查看统计信息,创建索引、重建索引、删除索引、 很耗用资源,需要在业务低峰期,

分区索引

分区表查询速度慢,可以建立分区索引。
在分区表上建立索引,子表上均为自动创建索引。
在分区表上删除索引,子表上的索引自动删除。

如果表是分区表,该表上创建的索引就是分区索引,非堆表每个
分区一个索引(局部索引),堆表可以创建全局索引,也可以创建局
部索引,在创建全局索引的时候指定 global 关键字。

create index "IND_SALE_SUM" on "TEST"."SALES_SUM"("SALE_ID")
storage(initial 1,next 1,minextents 1,on "IND");
create index "SYSDBA"."INDEX_PART" on "SYSDBA"."TABLE_4"("COLUMN_1") global storage(initial 1,next 1,minextents 1);

全文索引

全文检索技术是智能信息管理的关键技术之一,其主要目的就是实现
对大容量的非结构化数据的快速查找,DM 实现了全文检索功能,并
将其作为 DM 服务器的一个较独立的组件,提供更加准确的全文检索
功能,较好地解决了模糊查询方式带来的问题。
DM 中,全文索引必须在基表定义,而不能在系统表,视图,临时表,
列存表,外部表上定义,同一个列只能创建一个全文索引,在创建全
文索引的时候,用户可以为分词器定义分词参数,即控制分词器的数
量。
全文检索的中文分词依赖系统词库,该词库是只读的,不允许修改。
CHINESE_LEXER --中文最少分词
CHINESE_VGRAM_LEXER --机械双字分词
CHINESE_FP_LEXER 中文最多分词
ENGLISH_LEXER --英文分词
DEFAULT_LEXER --默认分词,中文英文最少分词

create context index cti_address on person .address(address1) lexer
default_lexer;

alter context index cti_address on person.address rebuild;
select * from person.address where contains(address1 ,'洪山区' and '太阳城' and
'202');

在这里插入图片描述

//全文索引更新
ALTER CONTEXT index cti_address on person.address rebuild;
//更新增加全文索引信息
ALTER CONTEXT INDEX CTI_ADDRESS ON PERSON.ADDRESS
INCREMENT;
//删除全文索引
drop context index "CTI_ADDRESS" on "PERSON"."ADDRESS";
//查看全文索引
Select * from ctisys.syscontextindexes;

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

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

相关文章

代码随想录算法训练营第二十九天(回溯5)|491. 非递减子序列、46. 全排列、47. 全排列 II(JAVA)

文章目录 491. 非递减子序列解题思路源码 46. 全排列解题思路源码 47. 全排列 II解题思路源码 总结 491. 非递减子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 …

练手项目层初阶1—《详解静态版本——通讯录管理系统》

文章目录 🚩前言🔊 项目需求📚 项目知识点包含🧩项目框架📝框架拆解分析✨Struct_book.h 头文件解析✨Struct_book.c文件解析✨test_book.c文件解析 📺演示效果🚀完整代码 🚩前言 俗…

Linux下Qt生成程序崩溃文件

文章目录 1.背景2.Qt编译生成程序2.1.profile模式的本质 3.执行程序,得到core文件4.代码定位4.1.直接使用gdb4.2.使用QtCreator 5.总结6.题外话6.1.profile模式和debug模式的区别 1.背景 在使用Qt时,假如在windows,当软件崩溃时,…

Linux 服务器间SSH免密码登录与拷贝文件(SCP)

适用背景 工作中频繁登录服务器和拷贝文件,都会提示输入密码在持续集成的场景下,自动部署应用时是没有人工干预的 解决方案 下面以实现A服务器到B服务器的免密码登录和拷贝文件为例,介绍相关的配置。(即A访问B不需要输密码&…

不能在主机和虚拟机之间拷贝文本(虚拟机ubuntu16.04)

问题 ubuntu16.04不能在主机和虚拟机之间拷贝文本。 原因 vmware tools没安装好。 解决办法 重新安装vmware tools,步骤入下: 让虚拟机加载C:\Program Files (x86)\VMware\VMware Workstation\linux.iso光盘文件,设置如下: …

DHT11温湿度传感器使用视频教程分享

下载地址: 温湿度计(STCDHT11): https://url83.ctfile.com/d/45573183-60623983-9b7f6c?p7526 (访问密码: 7526)

使用 CloudDM 操作 PostgrgSQL 数据库

CloudDM 简介 CloudDM 是 ClouGence 公司推出的一款一站式数据库管理工具,使用它可以方便地访问和管理 MySQL、Oracle、PostgreSQL、阿里云 RDS、Greenplum、TiDB、Redis、StarRocks、Doris、SelectDB、SQL SERVER、ClickHouse、OceanBase 、PolarDB-X 、IBM Db2 等…

JVM之常用监控工具

JVM之常用监控工具 jps jinfo 获取配置信息 基本语法 jinfo [options] <pid>常用选项 -sysprops&#xff1a;显示JVM进程的系统属性。-flags&#xff1a;显示用于启动JVM的命令行标志和VM选项。-flag <name>&#xff1a;显示指定JVM标志的当前值。-flag [|-]&…

vue想要突破全局样式限制又不影响别的页面样式怎么办

<!-- 用scope盖不住全局&#xff0c;随意来个class匹配私定&#xff0c;搜索关键词&#xff1a;不要随便改&#xff0c;乱打class名 --> <style> .lkajsdfjkalsfhkljashkflhaskl .el-input.el-input--default.el-input--suffix { width: 160px !important; } …

亮数据Bright Data,引领高效数据采集新体验

随着互联网和大数据的日益普及&#xff0c;我们对于高速、安全和无限畅通的网络体验追求越发迫切&#xff0c;随之而来的网络安全和隐私保护变得越来越重要。IP代理作为一种实用的代理工具&#xff0c;可以高效地帮我们实现网络数据采集&#xff0c;有效解决网络安全问题&#…

【Java集合进阶】list常见的方法和五种遍历方式数据结构

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

《QT实用小工具·十》本地存储空间大小控件

1、概述 源码放在文章末尾 本地存储空间大小控件&#xff0c;反应电脑存储情况&#xff1a; 可自动加载本地存储设备的总容量/已用容量。进度条显示已用容量。支持所有操作系统。增加U盘或者SD卡到达信号。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #if…

jsp中使用cookie+session实现自动登录功能

1、需求分析 在实际运用中的用户登陆网站中&#xff0c;多提供有记住密码和自动登陆等功能&#xff0c;方便同一用户短时间内不用再输入用户名和密码等繁琐信息可以快捷登陆。本案例将模拟用户自动登陆功能。 1.2、设计思路&#xff08;实现原理&#xff09; 创建login.html页面…

Golang学习系列1-pprof性能调优

1. pprof 简述 一位亦师亦友的话让我记忆犹新&#xff0c;他说“学习一个新事务&#xff0c;应该从三个方面入手what,why,how;且三者的重要程度应该是递减”。所以在本文的第一部分先叙述下pprof的what & why。 1.1 What&#xff1f; pprof是golang自身提供的一种性能分…

Python 代码混淆工具概述

在保护Python代码安全方面&#xff0c;有多种混淆工具可供选择&#xff0c;包括 Cython, Nuitka, Pyminifier 和 IPA guard。本文将介绍这些工具的特点和适用情况&#xff0c;以及在实际应用中的注意事项。 &#x1f4dd; 摘要 本文探讨了几种常见的 Python 代码混淆工具&am…

Acwing.1388 游戏(区间DP对抗思想)

题目 玩家一和玩家二共同玩一个小游戏。 给定一个包含 N个正整数的序列。 由玩家一开始&#xff0c;双方交替行动。 每次行动可以在数列的两端之中任选一个数字将其取走&#xff0c;并给自己增加相应数字的分数。&#xff08;双初始分都是 0分&#xff09; 当所有数字都被…

7种2024年算法优化BP,实现回归,单/多变量输入,单/多步预测功能,机器学习预测全家桶再更新!...

截止到本期MATLAB机器学习预测全家桶&#xff0c;一共发了19篇关于机器学习预测代码的文章。算上这一篇&#xff0c;一共20篇&#xff01;参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测…

《C++程序设计》阅读笔记【2-程序结构】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 程序结构1.1 外部存储类型1.2 静态存储类型1.2.1 静态全局变量1.2.…

【重学C语言】四、运算符和表达式

【重学C语言】四、运算符和表达式 概念左值与右值运算符一元运算符二元运算符三元运算符 优先级结合性 基本运算符赋值运算符算术运算符复合赋值运算符位运算符应用条件和逻辑运算符条件运算符逻辑运算符逻辑短路逻辑与&#xff08;&&&#xff09;的短路行为逻辑或&…

数学结论在dsa中的应用

1. LC 3102 最小化曼哈顿距离 VP周赛391 T4。这是个结论题目。 首先曼哈顿距离是需要两个数对而不是两个数去进行比较的&#xff0c;两个数之间你很轻易就知道差的绝对值最大是多少了&#xff0c;只要挑最大和最小两个数一减就可以了。 但是两个数对之间各项差的绝对值之和最…