小工具知识网

当前位置: 首页 > 行业知识 > MySQL系列之索引

行业知识

MySQL系列之索引

2026-11-06 15:15:09 来源:互联网转载

作者主页:青花锁 简介:Java领域优质创作者、Java微服务架构公号作者

简历模板、学习资料、面试题库、技术互助

文末获取联系方式


往期热门专栏回顾

专栏描述
Java项目实战介绍Java组件安装、使用;手写框架等
Aws服务器实战Aws Linux服务器上操作nginx、git、JDK、Vue
Java微服务实战Java 微服务实战,Spring Cloud Netflix套件、Spring Cloud Alibaba套件、Seata、gateway、shadingjdbc等实战操作
Java基础篇Java基础闲聊,已出HashMap、String、StringBuffer等源码分析,JVM分析,持续更新中
Springboot篇从创建Springboot项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回、全局异常处理、Swagger文档
Spring MVC篇从创建Spring MVC项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回
华为云服务器实战华为云Linux服务器上操作nginx、git、JDK、Vue等,以及使用宝塔运维操作添加Html网页、部署Springboot项目/Vue项目等
Java爬虫通过Java+Selenium+GoogleWebDriver 模拟真人网页操作爬取花瓣网图片、bing搜索图片等
Vue实战讲解Vue3的安装、环境配置,基本语法、循环语句、生命周期、路由设置、组件、axios交互、Element-ui的使用等
Spring讲解Spring(Bean)概念、IOC、AOP、集成jdbcTemplate/redis/事务等

MySQL专栏回顾

专栏导航描述
MySQL- -MySQL DDL通用语法
MySQL- -MySQL DML通用语法
MySQL- -MySQL 约束篇
MySQL- -MySQL 多表查询
MySQL- -MySQL 事务
MySQL- -MySQL 存储引擎
MySQL- -MySQL 性能分析
MySQL- -MySQL 索引

前言

此为MySQL专栏文章之一,讲解MySQL 索引。

索引是帮助 MySQL 高效获取数据 的 数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。

优点:

● 提高数据检索效率,降低数据库的IO成本

● 通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗

缺点:

● 索引列也是要占用空间的

● 索引大大提高了查询效率,但降低了更新的速度,比如 INSERT、UPDATE、DELETE


1、索引结构

1.1、B-Tree

[二叉树]

二叉树的缺点可以用红黑树来解决:

[红黑树]

红黑树也存在大数据量情况下,层级较深,检索速度慢的问题。

为了解决上述问题,可以使用 B-Tree 结构。

B-Tree (多路平衡查找树) 以一棵最大度数(max-degree,指一个节点的子节点个数)为5(5阶)的 b-tree 为例(每个节点最多存储4个key,5个指针)

[B-Tree结构]

B-Tree 的数据插入过程动画参照:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=68

演示地址:https://www.cs.usfca.edu/~galles/visualization/BTree.html

1.2、B+Tree

结构图:

[B+Tree结构]

演示地址:https://www.cs.usfca.edu/~galles/visualization/BPlusTree.html

与 B-Tree 的区别:

● 所有的数据都会出现在叶子节点

● 叶子节点形成一个双向链表(???双向还是单向)

MySQL 索引数据结构对经典的 B+Tree 进行了优化。在原 B+Tree 的基础上,增加一个指向相邻叶子节点的链表指针,就形成了带有顺序指针的 B+Tree,提高区间访问的性能。

[MySQL B+Tree 结构图]

1.3、Hash

哈希索引就是采用一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中。

如果两个(或多个)键值,映射到一个相同的槽位上,他们就产生了hash冲突(也称为hash碰撞),可以通过链表来解决。

[Hash索引原理图]

特点:

● Hash索引只能用于对等比较(=、in),不支持范围查询(betwwn、>、=或者

上一篇:怎么刷新私有云服务器内容?

下一篇:怎么把手机改服务器?