数据库索引的理解

目录

1.索引是什么,解决了什么问题

2.索引付出了什么代价

3.如何使用sql索引,有何注意事项

普通索引:

唯一索引:

主键索引(Primary Key Index):

删除索引:

创建主键索引的基本语法:

4.索引背后的数据结构


1.索引是什么,解决了什么问题

在数据库中,索引是一种数据结构,它被设计用来提高数据检索的速度。类似于书籍的目录,索引使得数据库能够快速定位到数据存储的位置,从而加速查询过程。

  1. 提高了查询速度:在数据库中假设有上千万条数据,在没有索引的情况下,我们可能需要遍历整张表,那么这个操作就会非常消耗时间。但是呢,通过创建索引,我们就能直接定位到所需数据的存储位置,从而减少查询时间
  2. 唯一性约束:唯一索引可以确保表中的某一列或多列数据的唯一性,防止重复插入数据

2.索引付出了什么代价

  1. 付出了更多的存储空间,可以理解成用空间来换取时间
  2. 可能会影响增删改的效率,但是整体来说利大于弊,对于这条下面单独讲解

为什么可能会影响增删改的效率呢?原因有以下几点

  • 索引维护成本 : 每次当插入新纪录,删除现有记录或更新索引字段的值,数据库都需要相应的更新索引结构以保证其准确性
  • 磁盘I/O操作增多 : 索引的维护通常涉及磁盘I/O操作,因为索引结构往往存储在磁盘上

3.如何使用sql索引,有何注意事项

   普通索引:

默认类型,允许重复值和空值

基本语法:

create index 下标名 on 表名(列名);

举例说明:

 根据上述图我们不难看出,在Key列,id行有一个MUL,那么这个MUL是什么意思呢?

‘MUL’表示该列上有非唯一索引,也就是我们所说的普通索引

‘UNI’表示该列上有唯一索引

'PRI'表示该列上有非唯一索引

当然,查看索引是否创建成功我们不止有desc 表名这一种方法,我们还可以使用show index from 表名,这种方法就不在这里展示了

唯一索引:

确保数据的唯一性和准确性,不允许有重复的值(除了NULL值)

基本语法:和普通索引差不多,只不过是多了一个unique关键字

create unique index 索引名 on 表名(列名);

举例说明:

这里的 'UNI' 参考上文普通索引的补充 

主键索引(Primary Key Index):

首先,每个表只能有一个主键,主键的值必须唯一且不能为空(NULL)。由于主键的唯一性和非空性,主键索引自然也具有唯一性,这意味着索引中的每个值必须是唯一的

在数据库中普通索引,唯一索引和主键索引是可以共存的,这里只是为了方便演示就把普通索引和唯一索引,删除索引的方式如下

删除索引:

基本语法:

drop index 索引名 on 表名;

举例说明: 

创建主键索引的基本语法:

alter table 表名 add primary key(列名);

 举例说明:


索引是针对列来创建的,后续查询的时候,查询条件使用的列和索引列匹配,才能索引生效,才能提高效率

针对一个比较大的表,创建/删除索引是一个非常危险的操作,可能会触发大量硬盘IO,把机器搞挂

那么这个硬盘IO又是什么呢?简单来说就是,硬盘I/O(Input/Output,输入/输出)是指硬盘与计算机系统之间进行的数据传输操作,具体包括读取(Read)和写入(Write)两个基本过程。

4.索引背后的数据结构

特点:

  • 每个节点上包含N个key,划分出N个区间
  • 每个父节点的元素都会下沉到子节点中,作为该子节点中最大值的角色来存在
  • 叶子节点这一层就构成了数据集合的全集
  • 使用类似于链表这样的结构,把叶子节点串起来

优势:

  • 高度比较低,降低了硬盘IO次数
  • 范围查询非常方便&高效
  • 所有查询都落到叶子节点上,开销稳定,容易预估成本
  • 叶子结点存储

根据上图我们可以看见每一层的数字都作为下一层的最大值,而叶子结点写的并非是真正的值,而是一个一个行,比如这个 “1” 可能存放的是 “1  张三  法务部” 这条记录,表里的每一行都是挂在B+树的叶子结点上面的,而非叶子节点只需要存储key的值即可,不需要存储数据行

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

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

相关文章

数据结构严蔚敏版精简版-绪论

1.基本概念和术语 下列概念和术语将在以后各章节中多次出现,本节先对这些概念和术语赋予确定的含义。 数据(Data):数据是客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号 的总称。 数据元素(DataElement):…

《Python学习》-- 实操篇一

一、文件操作 1. 1 读取文本文件 # 文件操作模式 # r (默认) - 只读模式。文件必须存在,否则会抛出FileNotFoundError。在这种模式下,你只能读取文件内容,不能写入或追加。 # w - 写入模式。如果文件存在,内容会被清空&#xff…

大模型日报2024-06-02

大模型日报 2024-06-02 大模型资讯 LLM360推出K2:开源大语言模型,计算效率超越Llama 2 70B 摘要: LLM360发布了K2,一款完全可复现的开源大语言模型。K2在计算效率上超越了Llama 2 70B,使用的计算能力减少了35%。这一突破性的模型为…

JAVA: 抽象类和接口

Java中可以可以定义不含方法体的方法,方法的方法体由其所在类的子类根据实际需求去实现,这样的方法称为抽象方法(Abstract Method),包含抽象方法的类必须是抽象类(Abstract Class)。 抽象方法和…

【架构设计】Java如何利用AOP实现幂等操作,防止客户端重复操作

1实现方案详解 在Java中,使用AOP(面向切面编程)来实现幂等操作是一个常见的做法,特别是当你想在不修改业务代码的情况下添加一些横切关注点(如日志、事务管理、安全性等)时。幂等操作指的是无论执行多少次,结果都是相同的操作。 为了利用AOP实现幂等操作以防止客户端重…

基于STM32的水库预警系统的Proteus仿真

文章目录 一、水库预警系统1.题目要求2.思路2.1 OLED显示汉字2.2 水质传感器等等2.3 步进电机2.4 驱动水泵 3.仿真图3.1 未仿真时3.2 开始仿真,OLED开始显示3.3 提高水位,开启阀门和预警3.4 通过按键增大水位阈值,取消报警 4.仿真程序4.1 程序…

轻松拿捏C语言——【文件操作】

🥰欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 🎉创作不易,请多多支持🎉 🌈感谢大家的阅读、点赞、收藏和关注💕 🌹如有问题,欢迎指正 目录 &#x1f…

关于模拟信道和数字信道根本区别的探讨

在学习过程中,了解到模拟信号、数字信号是什么,以及模拟信道只能传输模拟信号,数字信道只能传输数字信号,模拟信道要传输数字信号,需要经过调制解调器将数字信号调制成模拟信号再传输。也了解到,电话线是属…

谨以此文章记录我的蓝桥杯备赛过程

以国优秀结束了蓝桥杯cb组 鄙人来自电信学院,非科班出身,在寒假,大约2024年2月份,跟着黑马程序员将c基础语法学完了,因为过年,事情较多,没在学了。 最初就是抱着拿省三的态度去打这个比赛的&a…

C语言之旅:探索单链表

目录 一、前言 二、实现链表的功能: 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码: 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…

禁用手机连接 - Win11

问题 Win11系统自带手机连接软件,会在后台自启,不适用于全部的手机型号,而且常规方法无法卸载。甚至任务管理器中,此软件的后台进程高达76个,如下图。下文以Win11系统为例,介绍如何禁用手机连接。 解决方…

考研数学:有些无穷小不能用等价无穷小的公式?

今天要给大家分享的笔记是:《有些无穷小虽然是无穷小,但却不能用无穷小的相关公式》:

Winform GDI+双缓冲绘图与GDI API双缓冲绘图

一、GDI双缓冲绘图 BufferedGraphicsContext GraphicsContext BufferedGraphicsManager.Current;BufferedGraphics myBuffer GraphicsContext.Allocate(e.Graphics, e.ClipRectangle);Graphics g myBuffer.Graphics;Bitmap bitmap bitmaps[index];g.DrawImage(bitmap, 0, 0…

来自大厂硬盘的降维打击!当希捷酷玩520 1TB SSD卷到369,请问阁下该怎么应对?

来自大厂硬盘的降维打击!当希捷酷玩520 1TB SSD卷到369,请问阁下该怎么应对? 哈喽小伙伴们好,我是Stark-C~ 今年4月份的时候因为电脑上的游戏盘突然挂掉,为了性价比选购了希捷酷玩520 1TB SSD,同时我也是…

vue3加axios配合element-plus实现图片等文件本地上传,并获取服务器返回的真实地址数据,前端写法

小白写法嘿嘿 开发工具和关键词 开发工具: vscode 关键词:vue3、element-plus、axios 后端 后端业务逻辑处理使用的是unicloud的云函数,大家可以看我上一篇文章。 思路 1、禁止element-plus的el-upload组件自动上传,变成手动上传…

装修10个容易被遗忘的开关插座位置

雅静说家里开关插座哪些最容易忘记了留?      一共10个,你看看有少的吗,我家水电师父就没有留够      来了又重新补的很麻烦,记得收藏      1,大门口上边留一个,后期可以安装监控      特别家里有老人和小孩,以及经常来快递的      2,弱电箱留…

7. MySQL 视图、索引

文章目录 【 1. 视图 View 】1.1 视图原理1.2 创建视图 CREATE VIEW1.2.1 创建基于单表的视图1.2.2 创建基于多表的视图 1.3 查看视图1.3.1 查看视图的内容1.3.2 查看视图的详细信息 1.4 修改视图 ALTER VIEW1.4.1 修改视图内容1.4.2 修改视图名称 1.5 删除视图 DORP VIEW 【 2…

961题库 北航计算机 计算机网络 附答案 选择题形式

有题目和答案,没有解析,不懂的题问大模型即可,无偿分享。 第1组 习题 OSI 参考模型的第 5 层( 自下而上 ) 完成的主要功能是 A. 差错控制 B. 路由选择 C. 会话管理 D. 数据表示转换 100BaseT 快速以太网使用的导向传输介质是 A. 双绞线 B. …

Gin的快速入门和搭建

文章目录 Go的工程工程架构技术选型 Gin入门 Go的工程 基于Go生态,构建一个支持内容管理,内容加工、内容分发的内容库系统。 内容管理:增删改查内容加工:例如内容审核、推荐等内容分发:将内容可以推到不同的业务线 …

linux进阶的一些操作以及知识点------习题集(实践)

请创建以你姓名全拼的用户luwenhua,将其设置为免密登录,切换到luwenhua用户,打开终端,完成以下操作 (一)bash脚本基础练习 1)第一题:请在终端里定义两个用户变量num120&#xff0c…