MySQL

MySQL索引

索引本质

索引
索引是帮助MySQL高效获取数据的排好序的数据结构。
索引数据结构
二叉树
红黑树
Hash表
B-Tree

二叉树

举例
Select * from t where col2=89
普通查询:
遍历左边内容(存在磁盘)查询6次
加索引(放入数据结构):
即右边二叉树
节点内容:key(记录地址:Ox07,Ox56)+value(34,89)
二叉树特点(左子树大于右子树的值)
查询次数2

在这里插入图片描述

反例
select * from t where col1=6
索引形成的二叉树退化成单链表(效率太低)

红黑树

在这里插入图片描述

红黑树又称平衡二叉树
红黑树自动旋转平衡(缺点高度不可控)

B-Tree

在这里插入图片描述

不方便范围查找
同样数据量,B树比B+树高

B+树

B+树有B数变化所得
变化过程
Max.Degree=4
1,2,3,4,5,6
在这里插入图片描述

插入4
在这里插入图片描述

插入 5
在这里插入图片描述

插入6

在这里插入图片描述
在这里插入图片描述

索引从左到右 依次递增
空白地发是叶子节点的地址
查找元素,使用查找算法(二分)查找父节点
每个节点16kb,空白节点6bit,索引8bit
16kb/6+8bit=1170
根节点常驻内存

举例
查找20
1, 将根节点加载到RAM中,用查找算法查找
2, 根据空白节点获取子节点索引值,加载到RAM
3, 再次进行查找,知道找到叶子结点,取到值

hash表

在这里插入图片描述

hash(1)=Ox07
索引不连续 如Col2
不方便范围查找
举反例:
select * from t where col1>6

MyLSAM存储引擎(非聚集)

在这里插入图片描述

数据存储在磁盘
安装目录的data目录
.frm文件 表结构
.MYD文件 所有数据记录行
.MYI文件 MyLSAM的该表索引
在这里插入图片描述

举例:查询30
现在MYI文件找到索引,拿到数据地址,根据数据地址在MYD获取数据
InnoDB存储引擎(聚集索引)
在这里插入图片描述

.frm文件 表结构
.ibd文件 索引加数据
聚集(聚簇)索引>非聚集索引
mysql会自动寻找索引列(有序唯一)若没有自己维护索引列
叶子结点 数据之间的箭头作用:方便范围查找

联合索引

索引最左前缀原理
在这里插入图片描述

若name值不同,按name排序
若name相同,age不通,按age排序
若name相同,age相同,按position排序
举例
KEY 'idx_name_age_position’ ( 'name " , " age ’ , ‘position’) USING BTREE
1 EXPLAIN SELECT* PROM employees WHERE age = 30 AND position =‘manager’ ;
2 EXPEAIN SELECT * FROM employees WHERE position = ‘manager’;
3 EXPLAIN SELECT* FROM employees wHERE name = ‘Jeff’ and age=30;
1,2 不会使用当前索引,3会
因为1,2where条件不是name,导致是无序的,3有所以是有序的
在这里插入图片描述
不过尔尔~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值