MySql底层索引原理
前言
我们都知道MySql索引效率很高!那其中的原理是什么呢?先跑出个问题来:二叉树、红黑树(二叉平衡树)、BTree(平衡多叉树)、B+tree这几种类型中哪一种是mysql索引所选择的呢?
这个问题好多同学回答不出来,回去百度,结果也不是太明白吧!
这里我告诉大家,mysql所选的是B+tree,那B+tree又是什么呢?
B+tree优点
B+树:其实他是Btree的变种,是在他的基础上做了优化,
优点:
1、IO次数更少
2、范围查询简便
3、查询性能稳定
特征:
- 有K个子树的中间结点包含有k个元素(B树中有k-1个元素),每个元素只保存索引,而不保存数据,所有数据都保存在了叶子节点(k指的是每个节点的关键字个数,另外还有一个m指的是这棵树的高度)
- 所有数据都存放在了我们叶子节点上面,以及指向包含这些元素记录的指针(双向循环列表),并且我们的叶子节点是从小到大的顺序排列的,这样便于我们查找和排序。
- 所有的子节点都保存着中间节点元素
InnoDB存储引擎
InnoDB中的主键索引其实就是聚集索引,当然所有的数据都存在了主键索引位于的聚集索引B+Tree结构的叶子节点之中。这就是为什么我们在设计主键的时候要求我们的铸剑师有序原因了。假如我们的大小随机,那每次进来叶子节点的位置随机的,这样就会出现我们的页分裂,从而导致性能下降!
如果我们按照有序来处理,则每次都是按照顺序一排一排的进行排列,这样能够完美的比来了我们的页分裂。
好的,今天就先讲到这里,欢迎大家留言讨论
欢迎大家关注我的工种昊 《coder练习生》
MySql底层索引原理相关推荐
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- Mysql数据库索引原理及算法原理
前言 面试的时候总会被提及一些关于数据库操作的问题,那么数据库索引作为一项热门问题,总会被问到.最近在网上看到了一篇关于mysql数据库索引的好文章,认真看完之后肯定受益匪浅,(虽说有的地方我不太理解 ...
- MySQL的索引原理,索引的类型有哪些,如何创建合理的索引,索引如何优化。
欢迎大家关注我的公众号[老周聊架构],Java后端主流技术栈的原理.源码分析.架构以及各种互联网高并发.高性能.高可用的解决方案. 一.为什么需要索引? 索引是数据表种一个或者多个列进行排序的数据结构 ...
- MySQL联合索引原理解析
什么是MySQL联合索引 联合索引又叫复合索引,是MySQL的InnoDB引擎中的一个索引方式,如果一个系统频繁地使用相同的几个字段查询结果,就可以考虑建立这几个字段的联合索引来提高查询效率. 如何建 ...
- mysql之索引原理与慢查询优化
一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...
- 天天写order by,你知道Mysql底层执行原理吗?
在实际的开发中一定会碰到根据某个字段进行排序后来显示结果的需求,但是你真的理解order by在 Mysql 底层是如何执行的吗? 假设你要查询城市是苏州的所有人名字,并且按照姓名进行排序返回前 10 ...
- MySQL复合索引原理解析
什么是MySQL联合索引 联合索引又叫复合索引,是MySQL的InnoDB引擎中的一个索引方式,如果一个系统频繁地使用相同的几个字段查询结果,就可以考虑建立这几个字段的联合索引来提高查询效率. 如何建 ...
- 深入浅析Mysql联合索引原理 之 最左匹配原则。
前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和大牛交流中,发现遗漏了些东西,这里自己整理一下这方面的内容. 最左前缀匹配原则 在mysql建立联 ...
- MySQL联合索引原理_复合索引_组合索引_多列索引
文章目录 联合索引原理示意图 联合索引就是复合索引.组合索引.多列索引. 联合索引原理示意图
最新文章
- 阿里宣布开源Flutter应用框架Fish Redux!
- 从原理来看Silverlight 4的架构
- 程序员都和谁一起睡觉?
- 7 个习惯帮你提升Python运行性能
- php验证数字100倍数,js如何实现一个文本框只能输入数字 且是100的倍数
- 计算商品价格找零(Python)
- Swift UIlabel 的高级用法,文本显示表情,图片
- python增强对比度_python增加图像对比度的方法
- 命令行运行python找不到sqlite_ubuntu python3.6 找不到_sqlite3
- Java 信号 Semaphore 简介
- 曼哈顿交易 - 题解
- vscode调试html文件,vscode调试html文件
- WPF自定义路由事件(二)
- 使用Inkscape制作网易云音乐LOGO
- showToast的使用
- ECharts之类型3D(map,bar3D,scatter3D)
- 华硕主机退出BIOS界面
- ffmpeg实现变速播放的两种方案
- Information from parts of words: Subword Models
- OpenGL入门二——变换