索引的概念

  • 索引的概念
       1.索引是一种可选的与表相关的数据库对象,用于提高数据的查询效率。
       2.索引是一种有序的数据结构。
       3.如果一个表没有创建索引,则对该表进行查询时需要进行全表扫描;如果创建了索引,则在有条件查询时,系统先对索引进行查询,利用索引可以迅速查询到符合条件的数据。
       4.利用索引之所以能够提高查询效率,是因为在索引结构中保存了索引值及其相应记录的物理地址 ,即ROWID,并且按照索引值进行排序。当查询数据时,系统根据查询条件中的索引信息,利用特定的排序算法在索引结构中很快查询到相应的索引值及其对应 ROWID,根据ROWID可以在数据表中很快查询到符合条件的记录。如图所示:
    在这里插入图片描述

  • ROWID 的概念与作用
       1.在Oracle数据库中,ROWIN 是一个伪列,系统自动产生,能唯一标识每一条数据库行记录的 物理地址 ,通过ROWIN能快速定位到一条行记录。
       2.ROWID由18位16进制数构成。其中前1-6位为数据对象编号,7-9位为数据文件编号,10-15数据块编号,最后 3位为块中行 编号。
       3.因为使用ROWID可以快速定位记录,所以使用ROWIN检索及操作数据,效率最快。

  • 索引分类
       1.根据索引值是否唯一,可分为唯一性索引 和 非唯一性索引
       2.根据索引的组织结构不同,可分为平衡数索引 和 位图索引
       3.根据索引基于的列数不同,可以分为单列索引 和 复合索引

  • 创建索引语法
       1.创建索引使用 create index 索引名称 on 表名
       2.创建非唯一性索引:create index 索引名 on 表名
       3.创建唯一性索引: create unique index 索引名 on 表名
       4.创建复合索引: create index 索引名 on user( username, userage)

  • 创建索引原则
       由于索引作为一个独立的数据库对象存在,占用存储空间,并且需要系统进行维护,因此是否创建索引和创建什么样的索引需要遵循一定的原则。下列情况下 ,适合创建索引:
          1.表中数据量很大
          2.要查询的结果占表中的数据的 2% - %4
          3.经常用来做where条件中的列或者多表连接的列
          4.查询列的数据范围分布很广
          5.查询列中包含大量的Null值,因为空值不包含在索引中
       下列情况不适合创建索引
          1.数据量很小的表
          2.在查询中不常用来作为查询条件的列
          3.频繁更新的表
          4.查询条件中有单行函数时,用不上索引
          5.索引列作为表达式的一部分被使用 时,比如查询的条件是 salary * 12,此时在 salary 列上创建索引是没有效果的。

  • 删除索引
       下面几种情况可以考虑删除索引:
          1.索引不在使用
          2.通过一段事件监视,发现几乎没有查询或只有少数查询会使用该索引。
          3.由于移动了表数据而导致索引失效。
       删除索引后,索引中的数据及定义被删除,索引所占的数据空间被释放,但表中的数据仍然存在 。
          1.如果索引是通过create index 语句创建的,可以使用drop index 语句删除索引,语法为: drop index 索引名
          2.如果索引是定义约束时自动建立的,则禁用约束或删除约束时会自动删除对应的索引。
          3.此外,删除表时会自动删除与其相关的所有索引。

  • 查询索引信息
       1.可以通过查询 数据字典视图 或 动态性能视图 获取索引信息。
       2.数据字典视图 USER_INDEXES 包含索引的基本描述信息和统计信息,包括索引的所有者 、索引名称、索引的类型 、对应表的名称等等。
       3.数据字典视图 USER_IND_COLUMNS 包含索引列的描述信息,包括索引的名称、表的名称和索引列的名称等信息。
       例:select* from USER_INDEXES

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 枚举

枚举的格式 枚举是一种特殊的类 枚举类的最开始必须罗列所有类型 枚举类提供了一些父类的方法 values() :获取所有的的枚举对象,是一个数组 public enum A {A1, A2, A3;String name;A() {this.name "default";}String getName() {return name;}void setName(Strin…

AI预测福彩3D第25弹【2024年4月3日预测--第4套算法重新开始计算第10次测试】

今天继续对第4套算法进行测试,因为第4套算法已连续多期命中,相对来说还算稳定。好了,废话不多说了,直接上预测的结果吧~ 2024年4月3日福彩3D的七码预测结果如下 第一套: 百位:1 2 …

Windows系统下配置安装adb与Andriod手机有线和无线通信

目录 一、adb二、adb下载2.1 同版本获取2.2 官网下载 三、添加环境变量四、测试adb是否安装成功五、数据线adb连接手机5.1 开启开发者选项5.2 数据线连接电脑和手机5.2.1 没反应问题 5.3 终端测试 六、无线adb连接手机6.1 设置端口号6.2 添加手机ip地址6.3 测试无线adb连接 七、…

【网站项目】面向学生成绩分析系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

再拓信创生态圈|宁盾身份域管与深信服桌面云完成兼容互认证

近日,宁盾国产化身份域管(即身份目录服务软件)与深信服桌面云系统aDesk完成产品兼容性互认证。经过共同严格测试,宁盾国产化身份域管能够与深信服桌面云系统兼容对接运行,双方相互兼容,共同为企事业单位提供…

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

作为新一代的一站式数据库管理开发工具, SQLynx自发布上线以来,一直受到广大用户的好评与鼓励。 为了给用户提供更高效、更便捷、更可靠的数据库管理开发体验,SQLynx今日正式发布3.0.0版本,同步在麦聪软件官网上线,全…

【leetcode】双指针(二)

标题: 【leetcode】双指针(二) 水墨不写bug 正文开始: (一)总和为目标值的两个数 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#…

缺省参数

缺省参数 缺省参数概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实 参则采用该形参的缺省值&#xff0c;否则使用指定的实参。 void Func(int a 0) {cout<<a<<endl; } int main() {Func(); // 没有传…

Rust语言中Regex正则表达式,匹配和查找替换等

官方仓库&#xff1a;https://crates.io/crates/regex 文档地址&#xff1a;regex - Rust github仓库地址&#xff1a;GitHub - rust-lang/regex: An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear tim…

STM32学习和实践笔记(4): 分析和理解GPIO_InitTypeDef GPIO_InitStructure (b)

继续上篇博文&#xff1a;STM32学习和实践笔记&#xff08;4&#xff09;: 分析和理解GPIO_InitTypeDef GPIO_InitStructure (a)-CSDN博客 往下写&#xff0c; 为什么&#xff1a;当GPIO_InitStructure.GPIO_PinGPIO_Pin_0 ; 时&#xff0c;其实就是将对应的该引脚的寄存器地…

Springboot自动获取接口实现

ServiceLoader加载接口实现步骤 1.编写接口 public interface CommunicationAdapterFactory {void setKernel(LocalKernel kernel);boolean providesAdapterFor(Vehicle vehicle);BasicCommunicationAdapter getAdapterFor(Vehicle vehicle); }2.编写实现 // 实现类 1 publi…

详解k8s集群内外的访问方式

文章目录 1、集群内访问2、集群外访问2.1、Ingress转发外网请求2.2、LoadBanlancer接入外网请求2.3、NodePort接入外网请求 3、总结和对比3.1、Ingress、NodePort和LoadBalancer总结3.2、Ingress和网关的区别 1、集群内访问 在k8s中创建的微服务&#xff0c;大部分都是在集群内…