行业知识
MySQL系列之索引
作者主页:青花锁 简介: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、>、=或者
上一篇:怎么刷新私有云服务器内容?
下一篇:怎么把手机改服务器?