数据库索引的理解

目录

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的值即可,不需要存储数据行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot 集成 zxing 生成条形码与二维码

前面我们知道了怎么通过 使用 zxing 生成二维码以及条形码, 由于我们现在都是 web 端的项目了,那么我们看下怎么使用 Spring Boot 集成然后返回给前端展示: 工程源码 对应的工程源码我放到了这里:github源码路径,点击…

80V高耐压低静态线性稳压器/LDO,Vout 1v-65v 3.3V及5V方案最佳选择

概述 PC93XX系列专为动力而设计-敏感应用程序。它包括一个精度第二个高压输入级,超低功率 偏置电流分支,并产生超低功率和低压差线性调节器。PC93XX通过输入电压工作VOUT1V至65V,仅消耗1.8μA的静态电流,并提供1%的初始精度和低…

Maven项目打包成jar项目后运行报错误: 找不到或无法加载主类 Main.Main 和 jar中没有主清单属性解决方案

已经用maven工程的package功能进行了打包 找不到或无法加载主类 Main.Main 规定主类 主要在maven的配置文件当中 这边一定要绑定自己的启动类 jar中没有主清单属性 删掉这一行就行哈 正确的插件代码 <plugin><groupId>org.springframework.boot</groupId&…

孩子出生后为什么要做听力筛查?

孩子出生后为什么要做听力筛查&#xff1f; 新生儿听力筛查&#xff0c;就是对所有新生儿在尽早的时间&#xff08;出生48小时后&#xff09;进行系统的听力筛查测试。据相关文献报道&#xff0c;在我国&#xff0c;正常分娩的新生儿听力障碍的发生率约为0.1&#xff5e;0.3%&a…

gomail发送邮件的参数如何设置?如何使用?

gomail发送邮件的认证方式有哪些&#xff1f;怎么设置邮件发信&#xff1f; Gomail是一个常用的Go语言邮件发送库&#xff0c;它提供了简单易用的接口&#xff0c;使得邮件发送变得非常方便。AokSend将详细介绍如何设置gomail发送邮件的参数&#xff0c;帮助开发者更好地理解和…

Window11开放端口

&#xff08;1&#xff09;打开控制面板&#xff0c;进入【控制面板\系统和安全\Windows Defender 防火墙】 &#xff08;2&#xff09;点击左侧菜单【高级设置】&#xff0c;进入防火墙设置页面 &#xff08;3&#xff09;根据需要选择【入站规则】或者【出站规则】&#xff…

《猎杀:对决》是适合什么样的人玩 Mac电脑怎么玩《猎杀:对决》

《猎杀&#xff1a;对决》是一款集合了生存、竞技和恐怖元素的多人在线游戏&#xff0c;自推出以来受到了广大玩家的热爱。本文将详细探讨《猎杀&#xff1a;对决》适合什么样的人玩以及Mac电脑怎么玩《猎杀&#xff1a;对决》。本文将一一解析&#xff0c;帮助你了解这款游戏是…

全球家纺热潮持续!有哪些家纺爆款类目推荐入驻沃尔玛?

在全球家纺热潮中&#xff0c;选择沃尔玛家纺爆款类目入驻是明智之举。沃尔玛作为全球零售巨头&#xff0c;拥有庞大的消费者群体和销售渠道&#xff0c;对家纺产品销售具有显著优势。 ​以下是一些推荐的家纺爆款类目&#xff0c;供您参考&#xff1a; 一、高品质床品套件 床…

迪普微震撼发布:全新Xilinx Kintex-7 XC7K325 FPGA开发板!

01 产品概述 本公司基于Xilinx Kintex-7系列的开发平台采用核心板加扩展主板的方式&#xff0c;方便用户对相关板卡的二次开发利用。 其中&#xff0c;核心板包含一片芯片XC7K325T&#xff0c;使用FFG900封装&#xff0c;外挂4片512MB的高速DDR3芯片和1片256Mb的QSPI Flash芯…

mysql 如果有按照时间范围查询结果

1.前端传2024-06-21 到我们xml sql 文件中默认实际是 2024-06-21 00:00:00 <if test"dto.startTime ! null">and ps.created_at > #{dto.startTime}</if><if test"dto.endTime ! null">and ps.created_at < #{dto.endTime}</if…

(2) qml诞生的原因 和Qt Creator开发环境的介绍

文章目录 qml诞生原因Qt Quick应⽤程序Qt Creator环境1、MSVC2、MinGWMSVC的优缺点MinGW的优缺点 最后的选择延伸阅读 一些常用的快捷键统一格式化代码统一qml 语言的格式Locator 定位器帮助 qml诞生原因 可以在Qt5中开发的不同类型的经典应⽤程序。桌⾯应⽤程 序正在发⽣着改…

如何制作不限扫描次数的视频二维码?1分钟教程

不可否认的是&#xff0c;视频二维码正在各行各业发挥重要作用。不论是在线上宣传、线下活动&#xff0c;还是产品包装、展览展会上&#xff0c;只需要扫描视频二维码&#xff0c;就能在手机端获得专业的视频教程、查看品牌宣传视频、了解活动流程、快速获取关键信息等&#xf…

AI精选付费资料包【37GB】

课程介绍 一、人工智能论文合集 二、AI必读经典书籍 三、超详细人工智能学习大纲 四、机器学习基础算法教程 五、深度学习神经网络基础教程 六、计算机视觉实战项目 课程获取 资料&#xff1a;AI精选付费资料包&#xff08;37.4GB&#xff09;获取&#xff1a;扫码关注公z号…

msconfig修改引导导致电脑无法进入系统 和 启动蓝屏问题

目录 解决方法遇到的问题开机蓝屏进入【指定UFEI固件设置】进入bios启动系统选择界面&#xff08;忘了拍照&#xff09; 解决方法 找到一个移动U盘&#xff08;最好大于10G&#xff09;格式化&#xff1b;找一个好的电脑安装WEPE软件&#xff08;wepe安装链接&#xff09;&…

[leetcode hot150]第五十七题,插入区间

题目&#xff1a; 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示…

解决odbc 数据源创建之后删除失败问题

问题描述 该问题一般存在于用32位odbc管理程序删除了64位管理程序创建的数据源&#xff0c;被提示失败&#xff0c;然后再用64位odbc管理程序删除时发现删除不掉。怎么都删除不掉&#xff0c;不会影响体验&#xff0c;但是很膈应 问题解决 将该路径下的对应的ODBC数据源&…

判断JavaScript对象是否为空,最佳方法与性能对比

引言&#xff1a;在日常开发中&#xff0c;你是否经常需要判断一个对象是否为空&#xff1f;你知道有哪些高效的方法可以做到这一点吗&#xff1f;今天&#xff0c;我们不仅要探讨这些方法&#xff0c;还要通过性能对比找出最优解。快来看看&#xff0c;你平常用的方法是最佳选…

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…

【机器学习】——驱动智能制造的青春力量,优化生产、预见故障、提升质量

目录 一.优化生产流程 1.1 数据收集 1.2 数据预处理 1.3 模型训练 1.4 优化建议 1.5 示例代码 二.预测设备故障 2.1 数据收集 2.2 数据预处理 2.3 模型训练 2.4 故障预测 2.5 示例代码 三.提升产品质量 3.1 数据收集 3.2 数据预处理 3.3 模型训练 3.4 质量提升…

R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…