大家好 , 我是melo,一名大二后台练习生,大年初三 , 我又来充当反内卷第一人了?。。?专栏引言MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段,MySQL对我们来说似乎只是一个存储数据的好东西 , 存储时一股脑往里边塞,查询时也是盲目的全表查询(不带一点点优化) 。?
我们总是自欺欺人的觉得,我们通过其他方面来优化就好了阿,迟迟不愿面对MySQL高级 , 转而学习一些看似更为"高级"的东西,学Redis , 来分担MySQL的压力,学MyCat等中间件 , 实现主从复制 , 读写分离,分库分表等等 。(说的就是melo没错了)?
到了准备面试的时候,发现面试题里边的MySQL一问三不知~
文章插图
而自己学到的前沿中间件,问的几乎很少?。∽约阂仓皇腔嵊?,写简历时只能弱弱写上"了解"xxx中间件……?
当然了,学习MySQL高级篇,不单单只是为了面试,实际的项目中,这一块的优化是十分重要的,体验过服务器宕机后,只能默默........
文章插图
?
从现在开始吧,此时上岸还来得及?。。〕米糯蠖系暮伲?补充补充MySQL高级篇的知识点,从如下几方面开启 MySQL高级篇之旅
文章插图
本篇速览早在MySQL基础篇,我们就听说了索引这么个东西,听起来是个很高级的东西,但当时只停留在了,索引能够加快查找的效率这一阶段的认知 。这篇将从如下几点,来带你逐一攻破ta:
- 索引到底是什么
- 索引底层的实现
- 聚簇索引是什么?二级索引呢?
- 最左前缀原则
- 如何设计索引,遵循的原则
- 索引相关语法
本篇篇幅较长,全文近6000字,可以收藏下来慢慢啃,没事就掏出来翻阅翻阅 。建议通过侧边栏目录检索对您有帮助的部分,其中有emoji表情前缀属于重点部分,觉得对您有帮助的话,melo还会持续更进完善本篇文章和MySQL专栏 。
- 不过就怕等到我更新时,那会您不方便找到我了hhh(高情商求关注)
其实简单来说,索引就是一个排好序的数据结构
文章插图
?
左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的) 。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据 。
索引优势
- 加快查找和排序的速率,降低数据库的IO成本以及CPU的消耗
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性 。
- 索引实际上也是一张表,保存了主键和索引字段 , 并指向实体类的记录,本身需要占用空间
- 虽然增加了查询效率,但对于增删改,每次改动表,还需要更新一下索引
- 新增:自然需要在索引树中新增节点
- 删除:索引树中指向的记录可能会失效,意味着这棵索引树很多节点,都是失效的
- 改动:索引树中节点的指向可能需要改变
但实际上呢,我们MySQL中并不是用二叉查找树来存储 , 为何呢?要知道 , 二叉查找树,此处一个节点只能存储一条数据,而一个节点呢,在MySQL里边又对应一个磁盘块,这样我们每次读取一个磁盘块,只能获取一条数据,效率特别的低,所以我们会想到采用B树这种结构来存储 。
索引结构索引是在MySQL的存储引擎层中实现的,而不是在服务器层实现的 。所以每种存储引擎的索引都不一定完全相同 , 而且也不是所有的引擎都支持所有的索引类型 。?
推荐阅读
- 我的世界怎么用附魔台附魔书(我的世界用高级附魔台怎么附魔)
- MySQL 索引失效-模糊查询,最左匹配原则,OR条件等。
- 30 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-番外篇
- MySQL 全局锁、表级锁、行级锁,你搞清楚了吗?
- llinux下mysql建库、新建用户、用户授权、修改用户密码
- RedHat7.6安装mysql8步骤
- 29 《吐血整理》高级系列教程-吃透Fiddler抓包教程-Fiddler如何抓取Android7.0以上的Https包-终篇
- 究极无敌细节版 Mysql索引
- Mysql通过Canal同步Elasticsearch
- MySQL的日志文件