带你把MySQL索引吃透了
本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。 推荐学习:
本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。<p><img src="https://img.mryunwei.com/uploads/2023/04/20230416203703764.jpg"></p>
MySQL,一个熟悉又陌生的名词,早在学习Javaweb的时候,我们就用到了MySQL数据库,在那个阶段,MySQL对我们来说似乎只是一个存储数据的好东西,存储时一股脑往里边塞,查询时也是盲目的全表查询(不带一点点优化)。
我们总是自欺欺人的觉得,我们通过其他方面来优化就好了阿,迟迟不愿面对MySQL高级,转而学习一些看似更为"高级"的东西,学Redis,来分担MySQL的压力,学MyCat等中间件,实现主从复制,读写分离,分库分表等等。(说的就是melo没错了)
到了准备面试的时候,发现面试题里边的MySQL一问三不知~
而自己学到的前沿中间件,问得几乎很少!!自己也只是会用,写简历时只能弱弱写上"了解"xxx中间件……
当然了,学习MySQL高级篇,不单单只是为了面试,实际的项目中,这一块的优化是十分重要的,体验过服务器宕机后,只能默默........
从现在开始吧,此时上岸还来得及!!!趁着金三银四,补充补充MySQL高级篇的知识点,从如下几方面开启 MySQL高级篇之旅
建议通过侧边栏目录检索对您有帮助的部分,其中有emoji表情前缀属于重点部分,觉得对您有帮助的话,小编还会持续更进完善本篇文章和MySQL专栏。
索引定义
MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。除了数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。如下面的示意图所示 :
其实简单来说,索引就是一个排好序的数据结构
左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找快速获取到相应数据。
索引优势
所谓下推,顾名思义,其实是推迟我们的回表操作,MySQL不会轻而易举让我们去回表,因为很浪费。什么意思呢?来看下边这个例子。
我们建立了一个复合索引(name,status,address),索引中也是按这个字段来存储的,类似图中这样:
复合索引树(只存储索引列和主键用于回表)
name
status
address
id(主键)
小米1
0
1
1
小米2
1
1
2
我们执行这样一条语句:
何时建立索引
创建索引
默认会为主键创建索引--primary