Mysql数据库(1)—索引

news2024/11/18 16:38:42

索引是什么?

索引是帮助MySQL高效获取数据的排好序的数据结构。常见的索引数据结构包括:

  1. 二叉树
  2. 红黑树
  3. Hash表
  4. B-Tree

mysql索引分类

  • 按逻辑结构分类:B+ tree索引、Hash索引、Full-text索引。
  • 按物理存储分类:

(1)聚簇索引(主键索引)

​ 聚簇索引是一棵B+树,这棵B+数的叶子节点中保存了所有的记录数据,在innoDB中,一张表只能有一个聚簇索引,这就是主键索引。

(2)二级索引

​ 二级索引也是一颗B+树,但是这棵B+树的叶子节点中保存的是索引项和主键值,不会保存记录的实际数据。

  • 按字段特性分类:主键索引、唯一索引、普通索引、前缀索引。
  • 按字段个数分类:单列索引、联合索引。

联合索引也是一颗B+树

mysql索引B+树的原理

B/B+树是一种典型的外存排序方式:

  1. B+树是B树的一种进化,B树是一种多叉平衡排序二叉树,引入多叉,就可以减少对磁盘IO的次数,再简单讲述下B树的结构,每个结点中都有关键词、关键词所指向的指针,还有指向子结点的指针。针对每次查询操作,因为他是一颗排序树,所以他能够以最短的路径找到需要查询的关键词,找到对应的数据。
  2. 现在再来讲B+树就容易理解了,他是为了解决IO次数还是太多,就是说还需要减少B树的层次,外加需要减轻中间结点的磁盘容量,所以B+树和B树最大的区别是他将所有真正指向文件的指针保存在叶子结点中,而非叶子结点他只是保存指向文件的指针,这样就能减轻占用磁盘大小,同时增加每个结点中关键字的个数,保证每个结点中关键词的个数和子树一致,这样就能减少树的层次。同时B+树的叶子节点前后也是通过指针联系起来的。

B树和B+树区别:

  1. B树中间节点也保存数据,B+树数据保存在叶子节点,使得B+树有数据冗余,即节点中的数可能多次出现。
  2. B+树的叶子节点前后形成链路,这样便于范围查找
  3. B+树的节点中保存的数据个数和出度一致,B树保存的数据比出度少一,使得B+节点中能保存更多的数据,\降低了树的高度**,减少了磁盘IO的次数。

和AVL、B树、Hash索引相比,选择B+树结构作为索引的原因?

  1. B+树作为平衡树,其查询的时间效率为O(logN),由于叶子节点中还有数据,相较于B树,可以减少再次进行磁盘IO的次数;
  2. 和平衡二叉树AVL相比,AVL是二叉树,所以树的高度较高,进行磁盘IO的次数比B+树更多,而数据库查询的主要瓶颈就是在磁盘IO上;
  3. 和B树相比,由于B+树的叶子节点直接指向节点数据,可以快速进行数据访问,同时叶子节点间是有序的,能够进行范围查找;
  4. 和哈希表的索引结构相比,B+树的叶子节点是有序排列的,可以进行范围查找,这个在哈希表等结构中无法实现,需要做全表扫描,时间开销非常大;

Mysql聚簇索引和非聚簇索引

聚簇索引是索引和数据在一起的,一个表中只有一个聚簇索引,就是主键索引。非聚簇索引则索引和数据分开保存。默认的innoDB支持聚簇索引,MYISAM不支持聚簇索引。聚簇索引和非聚簇索引都是B+树的一种实现。

  1. 聚簇索引:聚簇索引是innoDB的索引方式,是主键索引的实现方式,索引和记录都保存在叶子节点中。如果没有主键索引,就用第一个非空唯一索引替代,如果还是没有就用表的隐含主键替代。
  2. 非聚簇索引:非聚簇索引在innoDB中和MYISAM存储引擎中实现的逻辑稍有不同。在innoDB中非聚簇索引中保存的是索引项和主键值,找到索引项后再通过主键值回表到聚簇索引来找到真正的数据;在innoDB中非聚簇索引保存的是索引项和其指向的真正数据,可以理解为MyISAM存储引擎中索引文件和数据文件是分离的。

CDC3C1DE-BFC1-4A1F-BD30-42C5A30E4C22

MySQL索引的最左前缀原则

就是在建立组合索引的时候,最频繁、区分度最高的字段放在最左侧;建立联合索引的B+树也是按照多字段的先后顺序新建的,如果where条件最左不是联合索引最左字段,则不会走到联合索引中去;

总结:联合索引的最左匹配原则,在遇到范围查询(如>、<)的时候,就会停止匹配,也就是范围查询前的字段可以用到联合索引,但是在范围查询字段的后面的字段无法用到联合索引。注意,对于 >=、<=、BETWEEN、like 前缀匹配的范围查询,并不会停止匹配。

mysql回表机制

mysql回表就是根据一个非主键的字段进行查询,第一次查询到的结果只是查询字段的索引和主键字段,需要再次根据主键查主键索引,这种过程成为回表。

mysql覆盖索引机制

将需要查询的字段和条件字段建立组合索引,这样根据查询条件在组合索引中就能查到响应字段,就不需要回表了。

mysql索引下推机制

针对条件语句中有多个条件的情况,在没有索引下推的情况下,会先根据最左索引查询处理的记录进行回表操作,再根据主键去继续满足下一个条件的记录,存在多次回表操作。

而有索引下推的情况是根据最左索引查询到了记录,会继续根据二级索引查询是否满足下一个条件,如果满足则返回,不满足则继续查询。

举例说明:就有点像查询成语字典,索引下推是根据首字查询到首汉字开头的成语,再在字典正文中继续查找,就不需要再回头看目录了。

mysql的主键一定是自增的吗?

mysql的主键不一定是自增的。主键的形式可以自己选择,但一般会选择自增字段作为主键,原因如下:

  1. 自增字段长度小,节省空间。
  2. 自增字段都是在索引末尾进行插入,减少了从中间插入导致的页分裂等情况。
  3. 自增字段保障了主键唯一性,不存在主键冲突的可能。

mysql一定要设置主键吗?不设置主键会怎么样?

mysql不是一定要设置主键,如果使用innodb的存储引擎,表的主键索引是聚簇索引,如果没有设置主键,则会用第一个非空的唯一索引做主键索引,如果不存在非空索引,则会自动生成一个隐含row_id做主键索引。

数据库索引的优势和劣势?

优势:

  1. 通过索引查找,可以减少全表扫描,减少IO次数,提升查询效率。
  2. 索引可以进行范围查找,可以进行排序和分组等操作。

劣势:

  1. 创建过多索引会占用过度磁盘空间;
  2. 创建过多的索引,在进行成本计算的时候也会消耗性能;

索引怎么建?如何优化?

  1. 在区分度高的字段上建立索引。

  2. 建立组合索引的时候考虑是否会形成索引覆盖,这样会减少回表的次数。

  3. 建立组合索引时,遵循最左匹配原则。将查询频率比较高,区分度比较大的字段放在最左侧。

  4. 为作为查询条件、进行排序、进行分组操作的字段建立索引,比如where、group by、order by字段建立索引。

  5. 索引字段作为条件查询时,不要进行函数计算,这样不会命中索引。

    索引失效的情况:

  6. 查询条件中有计算和函数处理。

  7. 查询条件的字段非联合索引最左字段。

    本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

更健康舒适更科技的照明体验!SUKER书客护眼台灯 L1上手体验

低价又好用的护眼台灯是多数人的需求&#xff0c;很多人只追求功能性护眼台灯&#xff0c;显色高、无频闪、无蓝光等基础需求。但是在较低价格中很难面面俱到&#xff0c;然而刚发布的SUKER书客L1护眼台灯却是一款不可多得的性价比护眼台灯&#xff0c;拥有高品质光源&#xff…

自我管理篇--想要快速融入新公司,你需要用些小妙招呢

自我管理篇—想要快速融入新公司&#xff0c;你需要用些小妙招呢&#xff01; 文章目录 一、建立良好的人际关系二、了解公司文化和价值观三、展现自己的能力和价值四、适应和融入团队五、建立良好的工作关系六、塑造专业的职业形象七、提升沟通和协调能力八、关注公司的发展动…

【数值计算方法】导论

目录 一、极简数学史 1. 萌芽时期 2. 古典数学时期 3. 近代前期 4. 近代后期 5. 现代数学 二&#xff0c;计算方法学什么&#xff1f; 1. 数值代数 a. 线性代数方程组求解&#xff08;等价变换&#xff09; b. 矩阵特征值特征向量&#xff08;相似变换&#xff09; …

【Android Framework系列】第13章 SVG矢量图形自定义组件(绘制中国地图)

1 前言 本章节我们来了解下什么是SVG矢量图形&#xff0c;怎么通过SVG实现图形的绘制&#xff0c;通过SVG实现不规则的自定义控件&#xff0c;项目实现一个中国地图&#xff0c;实现每个省都能够点击&#xff0c;项目地址在文末请自取。 2 SVG概念 2.1 SVG矢量图形 SVG 指可…

【机器视觉】HALCON目标图像检测实践(零基础版)

开发环境&#xff1a; 基本思路&#xff1a; 灰度阈值处理特征提取 ps:思考&#xff1a;如何通过阈值处理后&#xff0c;后续缩小检测目标范围&#xff1f; 二值化、梯度阈值、自适应阈值等方法来增强图像的对比度&#xff0c;从而突出目标特征&#xff0c;进一步缩小检测目标…

净利同比大增158%,国民内衣都市丽人已显“飞轮效应”

作者 | 曾响铃 文 | 响铃说 自2021年底创始人郑耀南回归开启“二次创业”后&#xff0c;都市丽人变革效果显著&#xff0c;稳健经营之路“渐入佳境”&#xff0c;好消息不断。 最新的半年财报&#xff0c;更是延续了这一点。最新财报显示&#xff0c;2023年上半年&#xff0…

基于AI智能分析网关EasyCVR视频汇聚平台关于能源行业一体化监控平台可实施应用方案

随着数字经济时代的到来&#xff0c;实体经济和数字技术深度融合已成为经济发展的主流思路。传统能源行业在运营管理方面也迎来了新的考验和机遇。许多大型能源企业已开始抓住机遇&#xff0c;逐步将视频监控、云计算、大数据和人工智能技术广泛应用于生产、维护、运输、配送等…

8.31 加载资源文件 信号与槽机制

登录窗口 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this -> setFixedSize(540, 410); //固定窗口大小this -> setWindowTitle("啊啊啊"…

比较opencv,pillow,matplotlib,skimage读取图像的速度比

上面这些库都被广泛用于图像处理和计算机视觉任务&#xff1b; 不同的图像读取库&#xff08;OpenCV&#xff0c;Pillow&#xff0c;matplotlib和skimage&#xff09;的读取速度&#xff0c;是怎么样的一个情况&#xff1f; 下面分别从读取速度&#xff0c;以及转换到RGB通道…

文心一言向全社会开放

大家好&#xff0c;我是洋子 今天和大家宣传一件令人激动的事情 8月31日&#xff0c;文心一言率先向全社会全面开放。广大用户可以在应用商店下载“文心一言APP”或登陆“文心一言官网(https://yiyan.baidu.com)体验。同时&#xff0c;企业用户可以直接登陆百度智能云千帆大模…

云渲染平台是如何收费的?

现在的云渲染平台实在太多了&#xff0c;那么多平台&#xff0c;他们都是如何收费的呢&#xff1f;这篇文章我们就一块来看看吧。 一、渲染100(http://www.xuanran100.com?ycode1a12) 渲染100位于成都&#xff0c;是国内知名的云渲染公司&#xff0c;15分钟2毛60分钟8毛非常适…

《Flink学习笔记》——第十二章 Flink CEP

12.1 基本概念 12.1.1 CEP是什么 1.什么是CEP&#xff1f; 答&#xff1a;所谓 CEP&#xff0c;其实就是“复杂事件处理&#xff08;Complex Event Processing&#xff09;”的缩写&#xff1b;而 Flink CEP&#xff0c;就是 Flink 实现的一个用于复杂事件处理的库&#xff08…

Java之API详解之BigDecimal类的详细解析

7 BigDecimal类 7.1 引入 首先我们来分析一下如下程序的执行结果&#xff1a; public class BigDecimalDemo01 {public static void main(String[] args) {System.out.println(0.09 0.01);}} 这段代码比较简单&#xff0c;就是计算0.09和0.01之和&#xff0c;并且将其结果…

模拟电子技术基础学习笔记三 PN结

采用不周的掺杂工艺&#xff0c;将P型半导体与N型半导体制作在同一块硅片上&#xff0c;在它们的交界面就形成PN结。 扩散运动 物质总是从浓度高的地方向浓度低的地方运动&#xff0c;这种由于浓度差而产生的运动称为扩散运动。 空间电荷区 - 耗尽层 漂移运动 在电场力的作…

【马蹄集】第二十四周——高精度计算专题

高精度计算专题 目录 MT2191 整数大小比较MT2192 AB problemMT2193 A-B problemMT2194 大斐列MT2195 升级版斐波那契数列MT2196 2的N次幂 MT2191 整数大小比较 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 给出两个正整数&…

邮件群发的功能优势

动态IP切换登录发送 保证送达率 软件可自动切换不同的动态拨号VPS的IP&#xff0c;登录不同的第三方免费邮件发送方&#xff0c;模拟真实环境&#xff0c;一个IP登录一个小号邮件账号发送&#xff0c;这样可以绕过因为一个IP同时登录同个第三方免费邮箱的不同账户而造成的屏蔽&…

HUAWEI华为笔记本MateBook 16 2021款 锐龙版 R7 集显(CREM-WFD9)原厂Win10系统

华为原装出厂系统自带指纹、显卡、声卡、网卡等所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/18XIYnasYFfLxSKS6LfoHvw?pwdly6j 提取码&#xff1a;ly6j

WOFOST模型与PCSE模型应用丨数据准备,模型参数解读与设置,模型运行与结果输出,模型结果解读与决策支持等

目录 专题一 理论基础 专题二 数据准备 专题三 WOFOST模型基础 专题四 PythonCropSimulationEnvironment 专题五 案例拓展 更多应用 WOFOST&#xff08;WorldFoodStudies&#xff09;和PCSE&#xff08;PythonCropSimulationEnvironment&#xff09;是两个用于农业生产模…

安装使用electron

一、安装node和npm 运行cmd查看是否安装及版本号 npm -v node -v 二、安装electron npm直接安装会报错缺少什么文件&#xff0c;使用cnpm进行安装 直接安装cnmp后&#xff0c;再用cnmp命令安装可能会报错Error: Cannot find module ‘node:util’ 原因是npm版本与cnpm版本…

高中学历,月薪3000服务员,用四个月“改命”进国企,变身网络安全工程师

最近几年&#xff0c;不少年轻人都感到非常焦虑&#xff0c;压力大&#xff0c;迷茫。在时代变迁的洪流中&#xff0c;如何获得内心的平静呢&#xff1f; ——成长。 “只有认知突破&#xff0c;才能带来真正的成长。”这是雷军在8月14日年度演讲中提到的&#xff0c;近十年来…