当前位置: 首页 > news >正文

【MySQL 一 数据库基础】深入解析 MySQL 的索引

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


索引


概念


索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。


作用


  • 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
  • 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
  • 索引对于提高数据库的性能有很大的帮助。

在这里插入图片描述


使用场景


要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:

  • 数据量较大,且经常对这些列进行条件查询;
  • 索引会提高查询速度,但是可能会影响增删改操作的速率,因为增删改操作,需要同步更新维护索引;
  • 索引会占用额外的磁盘空间;

满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。


操作索引的SQL


创建主键约束(PRIMARY KEY)唯一约束(UNIQUE)外键约束(FOREIGN KEY)时,这几个约束都会先进行查询操作:在执行SQL语句前,如果有主键约束,数据库会先进行查询操作,确保表主键唯一;如果有唯一约束,会查询该列是否有重复数据;如果有外键约束,在子表中涉及插入/修改,需要查询父表,反之亦然。

所以上述的约束涉及频繁的查询操作,数据库会为带有上述约束的对应列自动创建索引。

在这里插入图片描述


drop table student ; 
drop table class ; 

create table class( classId int primary key , className varchar(20) ) ;

create table student ( 
    id int primary key , 
    name varchar(20) , 
    classId int , 
    foreign key (classId) references class(classId) 
);

show index from student;

在这里插入图片描述


查看索引


show index from table_name ;

创建索引


创建索引对于达到千万级别的数据量来说,是一个危险操作,很可能触发大量的硬盘 IO ,直接导致机器卡死;所以在最初创建表的时候,就把所需的索引创建规划好,如果要对已经有大量数据的列添加索引,就需要部署新的数据库机器。


create index index_name on table_name(column_name);

create index name_index on student(name) ;  -- 给 student 表的 name 列创建索引

show index from student ;

在这里插入图片描述


删除索引


删除索引的操作,只能删除自己创建的索引,不能删除自动生成的索引;慎重使用该操作。

drop index index_name on table_name ;

索引底层的数据结构


在这里插入图片描述


所以,引入数据结构 B+ 树,B+ 树是为数据库索引量身定做的数据结构:

在这里插入图片描述

B+树在数据库系统中具有以下几个显著优势:


(1) 高效的查找性能:


B+树是一种自平衡树,每个叶子节点到根节点的路径长度相同;

B+树在插入和删除节点时会进行分裂和合并操作,以保持树的平衡,但它又会有一定的冗余节点,使得删除的时候树结构的变化小,更高效。

查找、插入、删除等操作的时间复杂度为0(log n),能够保证在大数据量情况下也能有较快的响应时间。


(2) 树的高度增长不会过快,使得查询磁盘的I/O次数减少:


B+树不像红黑树,数据越多树的高度增长就越快。它是多叉树,非叶子节点仅保存主键,或索引值和页面指针,使得每一页能容纳更多的记录,因此内存中就能存放更多索引,容易命中缓存,使得查询磁盘的 I/O 次数减少。


(3) 范围查询能力强:


B+树特别适合范围查询。因为叶子节点通过链表链接,从根节点定位到叶子节点,查找到范围的起点之后,只需要顺序扫描链表即可遍历后续的数据,非常高效。


在这里插入图片描述


在这里插入图片描述


扩展知识:B+树和B树区别


  • (1) B树每个节点都存储了完整的数据,而B+树非叶子节点仅存储key和指针,完整数据存储在叶子节点。 这使得B+树可以在内存中存放更多索引页,减少磁盘查询次数。

  • (2) B+树叶子组成了链表,便于区间查找,而B树只能每一层遍历查找。

  • (3) B+树查询时间更平均、稳定,都需要从根节点扫描到叶子节点。而B树则在非叶子节点就可能找到对应的数据返回。

经典面试题


在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

相关文章:

  • 第三届通信网络与机器学习国际学术会议(CNML 2025)
  • 讲解一下SpringBoot的RPC连接
  • 机器学习 - 特征学习(表示学习)
  • 【OJ项目】深入剖析题目接口控制器:功能、实现与应用
  • 【计算机毕业设计】Spring Boot教师人事档案管理系统功能说明
  • Python爬虫框架 - 实际项目(拿到可以直接用)
  • 中望CAD c#二次开发 ——VS环境配置
  • 【Getting Started】-数据结构介绍-Introduction to Data Structures
  • 异步加载和协程+Unity特殊文件夹
  • PySpark查询Dataframe中包含乱码的数据记录的方法
  • React Native之React整理(一)
  • K8s组件
  • 「软件设计模式」建造者模式(Builder)
  • Java--IO流详解(下)--相互转换(含Properties详解)
  • 强化 CSS 样式优先级的多种方法
  • Linux基础20-C语言篇之流程控制Ⅰ【入门级】
  • 利用Python和SQLite进行数据处理与优化——从数据库操作到高级数据压缩
  • CMake技术细节:递归搜索目录添加源文件
  • 【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】
  • 微信小程序日程预约
  • 中华人民共和国和俄罗斯联邦关于全球战略稳定的联合声明
  • 奥利弗·斯通回顾越战50周年:我们不善于总结历史教训
  • 李云泽:大型保险集团资本补充已经提上日程
  • 这个接班巴菲特的男人,说不出一个打动人心的故事
  • 湖北十堰市委副秘书长管聪履新丹江口市代市长
  • 41年轮回,从洛杉矶奔向洛杉矶,李宁故地重游再出发