MySQL索引原理

索引: 索引在MySQL中也叫是一种“键”,是存储引擎?于快速找到记录的一种数据结构。

本质:
通把随机的2过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是说,有了这种索引机制我们可以总是用同一种查找方式来锁定数据。

磁盘IO与预读

磁盘预读:当一次IO时不光把他当前磁盘地址的数据,而是把相邻的数据也都读取到内存的缓冲区内。(一次磁盘IO对于CPU非常慢)

索引的数据结构:

数据结构:数组、栈、链表、队列、树、图
树: 树状图是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。
深度:树的高度(“层数”)

特点:
每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树

B+树: ( 树 -- 二叉查找树 -- 平衡二叉树)
INnodb -- 索引默认B+树
叶子节点:带指针

性质:索引字段要尽量小

B+树详解:https://blog.csdn.net/Fmuma/article/details/80287924

聚集索引和辅助索引(非聚集索引):
聚集索引:
优点:对主键的排序查找和范围查找速度非常快,叶子结点数据就是用户所要查询的数据。
范围查询(即如果要查找主键某?范围内的数据,通过叶?节点的上层中间节点就可以得到?的范围,之后直接读取数据?即可)

辅助索引:
除了聚集索引外都是辅助索引(区别聚集索引:辅助索引的叶子节点不包含行记录的全部数据。每个叶子节点中的索引行中还包含一个书签)

聚集索引 非聚集索引
纪录的索引顺序与无力顺序相同, 因此更适合between and和order by操作 索引顺序和物理顺序无关
叶子结点直接对应数据, 从中间级的索引的索引行直接对应数据页 叶子结点不直接指向数据页
每张表只能创建一个聚集索引 每张表可以有多个非聚集索引,需要更多磁盘和内容,多个索引会影响insert和update的速度

MySQL索引管理

功能:快速查找
mysql中primary key,unique,联合唯一也都是索引,这些索引除去加速查找以外,还有
约束功能

MySQL常用的索引:
普通索引index:加速查找
唯一索引:主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
-唯一索引UNIQUE:加速查找+约束(不能重复)
联合索引:
PRIMARY KEY(id,name):联合主键索引
UNIQUE(id,name):联合唯一1索引
INDEX(id,name):联合普通索引

索引的两大类型hash与btree:
hash类型:查询单条快,范围查询慢
btree类型:b+树,层数越多,数据量指数级增长(此时使用,因为innodb默认支持btree)

MySQL索引原理

上一篇:右键新建文件没有txt(文本文档)文件


下一篇:基于Docker的Mysql主从复制搭建