MySQL知识点复习 - 索引分类

索引

可以把书开头的目录比喻成索引,那么在数据库中,索引就可以理解为数据的目录。

索引的分类

可以按照四个角度来进行分类

  • 数据结构:b+🌲、hash、full-text索引
  • 物理存储:聚簇、二级索引
  • 字段特性:主键、唯一、普通、前缀索引
  • 字段个数:单列、联合索引

按数据结构分类

索引类型InnoDBMYISAMMemory
b+🌲
hash
full-text

现在一般都用innoDB作为存储引擎,b+🌲是采用比较常见的类型。

在建表的时候,存储引擎默认会根据不同的场景选择不同的列作为索引:

  • if有主键,默认选择主键作为聚簇索引的索引键
  • else if 没有主键 ,就会选择第一个没有null值的唯一列作为聚簇索引的索引键
  • else if 都没有,会自动生成一个隐藏起来的自增id作为索引键

创建主键索引和二级索引的默认使用的也是b+🌲索引。(其他索引都统称为辅助索引也可以叫二级索引或者是非聚簇索引。)

数据存储在b+🌲时候是什么样子的?

每个节点中的数据都是按照主键的顺序来存储的,在b+🌲的字节点中可以看到所有的索引值,每一层的父节点的索引值都会出现在下层子节点的索引值(所以可以看到所有的索引值信息),并且每个字节点都有两个指针,分别指向上一个子节点和下一个子节点(这么说这玩意就是一个双向链表)。

1. 说说根据主键查询一条信息的执行过程?
select * from m_user where id = 24

查询过程:(伪思路)

  1. 先将主键id = 24 跟索引数据进行比较,24 在 20~30之间,所以根据结构的逻辑,会找到第二层的索引数据20,26,28中进行查找。
  2. 在二层数据(20,26,28)中进行查找,因为24在20~26之间,所以就去到第三排的数据(22,23,24)
  3. 所以可以在第三层数据中找到24的这条数据,结果会直接跟在索引值的后面。

小结一下
b+🌲对比b🌲和二叉🌲的查询效率要高,因为即便在数据量很大的情况下对于磁盘的io也就只有3~4次。

2. 通过二级索引查询数据的过程

主键索引和二级索引的b+🌲的区别是:主键索引下存放的是真实的物理数据而二级索引下存放的是主键值。

所以如果使用二级索引来查询数据,就是先在通过这个树进行查询,找到了主键索引的值之后,再重复上面主键索引的查询操作,就可以获取到所有的数据,这个过程叫做回表,意思就是需要跑两次b+🌲。但如果在二级索引中查询的数据是可以在二级索引的🌲中找到的话,就不需要再跑一次主键索引的🌲,这个过程叫做覆盖索引。(比如直接select id from where m_user where id = ??这种情况就不会再跑一次主键索引)

done,下一篇再总结物理存储分类的索引。

OK,第二天继续总结这个知识点

按物理存储分类

从物理存储的角度进行分类可以分为:

  • 聚簇索引(主键索引):跟上面说的一样,这里的叶子节点存放的是实际的数据
  • 二级索引(辅助索引):这里存放的是主键值

按字段特性分类

  • 主键索引

见文知义,在创建表的时候建立在主键字段上的索引,一张表只会有一个主键索引,不允许存在NULL【这跟主键的特征相似,也就是简单的可以理解为建表的时候自己设置的主键,PRIMARY KEY(xxx)】

  • 唯一索引

建立在UNIQUE的索引,一张表可以有多个唯一的索引,但是这个索引的值必须是唯一的,但是允许有NULL值

  • 普通索引

没有什么特别的要求,就是单纯在创建表的时候用INDEX(xxx)的这种写法

  • 前缀索引

这个索引只能用在字符类型的字段中,因为它不是建立在整个字段上的,可以理解为startwith什么的写法吗?不对不应该这样说,看了一下它的用法是INDEX(xxx(长度)),那就是说是建立在这个字段的前几个字符所建立的索引~

按字段个数分类

很好理解,建立在一列的索引上交单列索引,多列索引就叫做联合索引。

联合索引存在最左匹配原则,意思就是回按照最左优先的方式进行索引的匹配。假设创建了abc三个字段的索引,并且查询的时候是where a = 1 and b = 2 and c =3 的就能正常的走索引,但是因为mysql本身就有做过优化,所以a放在什么位置是不重要的,但是如果是where b = 2 或者是 where b = 2 and c = 3,那么这个联合索引是会失效的,它并没有遵循最左匹配原则。

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

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

相关文章

Linux系统安装MySQL8.40(保姆级教程)

前言: 说明:本文章是在阿里云ecs上安装MySQL,即:Linux是在联网状态下。 一、安装前环境准备 1.查看MySQL应用是否已存在 rpm -qa |grep mysql说明:若返回空信息,就说明当前环境没有安装MySQL。 2.查看ma…

如何要进行源代码加密?源代码加密的必要性

由于研发人员比普通办公人员要精通电脑,除了常见的网络,邮件,U盘,QQ等数据扩散方法外,还有很多对于研发人员来说非常容易的方法(未列全): 物理方法: — 网线直连&#…

解决方案:如何区分python里面绝对路径跟相对路径的不同

文章目录 一、现象二、解决方案 一、现象 在工作中,会经常混淆绝对路径跟相对路径的区别,我也是找了资料之后就懂了,但时间一长就混淆了,于是,我在这里记录下 二、解决方案 在Python中,绝对路径和相对路…

关于el-card的height设置100%后, el-card内容超出高度后,内容被隐藏这件事

1. 解决方法 全局样式添加以下代码 .el-card__body{height: 100%;width: 100%; }2. 问题原因 代码 <el-card style"height: 100%"><!-- ... --> </el-card>选中.el-card 元素发现这里的 .el-card 的 overflow:hidden 而内部 .el-card__body除…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

七段 LED 显示器(7段数码管)

7 段 LED 显示器, 通常简称为 LED 数码管 或 数码管. 通过 菜单--绘制--数字芯片--添加 7 段 LED 显示器 可以引入它. 普通模式 它内部其实就是七盏长条状的 LED 灯, 有的横着放, 有的竖着放. 七个灯用 a b c d e f g 分别表示. 灯的位置从上到下, 从里到外顺时针下来, 如上图…

青年女演员白澜闪耀亮相第五届庐山电影节红毯

2024年9月25日&#xff0c;演员白澜受邀出席了第五届庐山电影节盛典晚会&#xff0c;在这个星光熠熠的夜晚&#xff0c;青年演员白澜以一袭精心设计的礼服惊艳亮相&#xff0c;成为红毯瞩目的焦点。 整个第五届庐山国际爱情电影周以“庐山&#xff0c;你的爱情靠山”为主题&…

帆软通过JavaScript注入sql,实现数据动态查询

将sql语句设置为参数 新建数据库查询 设置数据库查询的sql语句 添加控件 JavaScript实现sql注入 添加事件 编写JavaScript代码 //获取评价人id var pjrid this.options.form.getWidgetByName("id").getValue();//显示评价人id alert("评价人&#xff1a;&…

微服务架构拆分策略与实践

微服务架构拆分策略与实践指南 随着互联网技术的发展&#xff0c;传统的单体应用逐渐显现出其局限性&#xff0c;特别是在扩展性和维护性方面。微服务架构作为一种解决这些问题的方法&#xff0c;通过将大型应用分解成一系列小型、独立的服务单元&#xff0c;每个单元负责单一…

PG数据库查询字段备注信息

在 PostgreSQL 数据库中&#xff0c;要查询某个表的字段名&#xff08;即列名&#xff09;及其备注信息&#xff0c;可以使用 information_schema.columns 视图来获取列名&#xff0c;并结合 pg_description 和 pg_class 等系统表来获取列的备注信息。下面是一个示例 SQL 查询&…

低代码开发平台:未来五大发展趋势预测

在数字化转型的浪潮中&#xff0c;低代码开发平台正迅速崛起&#xff0c;成为企业软件开发的重要工具。随着技术的不断进步和市场需求的持续增长&#xff0c;低代码开发平台在未来将展现出更为广阔的发展前景。本文将预测并探讨低代码开发平台的五大发展趋势。 深度融合数字化与…

re轻松拆分四则运算expression(^从头匹配、(?:xxxx)非捕获组、| 交替运算符联合演习)

与ai对抵聊“算式匹配”&#xff0c;发现^从头匹配、(?:xxxx)非捕获组、| “交替”运算符联合使用的妙处。 (笔记模板由python脚本于2024年09月27日 18:35:32创建&#xff0c;本篇笔记适合喜欢python喜欢正则的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;…

【Kubernetes】常见面试题汇总(三十九)

目录 92.你所用的到的日志分析工具有哪些以及它们如何与 K8s 集群通讯。 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kubernetes】的生产…

数据集成需要解决的主要问题有哪些?

在企业业务的不断扩展和数据的日益增长下&#xff0c;数据集成已成为推动企业创新和发展的关键力量。然而&#xff0c;数据集成并非易事&#xff0c;它面临着诸多挑战和问题。那么&#xff0c;数据集成究竟需要解决哪些主要问题呢&#xff1f; 一、数据集成面临的主要问题 1. …

【RabbitMQ】死信队列、延迟队列

死信队列 死信&#xff0c;简单理解就是因为种种原因&#xff0c;无法被消费的消息。 有死信&#xff0c;自然就有死信队列。当一个消息在一个队列中变成死信消息之后&#xff0c;就会被重新发送到另一个交换器中&#xff0c;这个交换器就是DLX&#xff08;Dead Letter Excha…

连锁收银系统的五大功能 选择开源收银系统三要素

连锁收银系统的五大功能&#xff0c;很多新手是不清楚的&#xff0c;老手也只是知道一些大概&#xff0c;今天&#xff0c;商淘云为大家分享收银系统的五大功能&#xff0c;尤其是第五个&#xff0c;大部分人不清楚&#xff0c;有的企业前面选了不合适的收银系统&#xff0c;导…

如何在iPad上设置Chrome为默认浏览器

将Chrome设置为iPad上的默认浏览器&#xff0c;不仅能够享受到谷歌强大的搜索功能和丰富的扩展生态&#xff0c;还能通过一系列自定义设置来进一步提升浏览体验。本文将详细介绍如何在iPad上完成这一设置&#xff0c;并探讨如何通过优化Chrome浏览器的相关功能&#xff0c;让您…

c语言200例 64

大家好&#xff0c;欢迎来到无限大的频道。 今天带领大家来学习c语言。 题目要求&#xff1a; 设计一个进行候选人的选票程序。假设有三位候选人&#xff0c;在屏幕上输入要选择的候选人姓名&#xff0c; 有10次投票机会&#xff0c;最后输出每个人的得票结果。好的&#xff…

Android 利用OSMdroid开发GIS 添加点、线、面和标记点

部署看这个&#xff1a;Android 利用OSMdroid开发GIS-CSDN博客 直接上代码 activity_main.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xm…

【LLM多模态】视频理解模型Cogvlm-video和MVBench评测基准

note Cogvlm-video模型通过视频抽帧&#xff08;24帧&#xff0c;每帧大小为224 x 224&#xff09;后经过ViT进行图像编码&#xff08;ViT中添加了2x2的卷积核更好的压缩视觉信息&#xff09;&#xff0c;使用adapter模块更好的将视觉特征和文本特征对齐&#xff0c;得到的图像…