5.MySql索引的使用
2021-04-22 09:34:07 0 举报
AI智能生成
学习笔记
作者其他创作
大纲/内容
5.MySql索引的使用
作用
创建了索引
并合理的利用了索引
才能提升查询效率
避免失效的索引
准备环境
避免索引失效
全值匹配
对索引中所有列都指定具体值
最左前缀法则
如果是复合索引,则要遵守最左前缀法则
指的是
查询从索引的最左前列开始
并且不跳过索引中的列
匹配最左前缀法则
索引生效
最左前缀原则是发生在复合索引上的
只有复合索引才会有所谓的左和右之分
eg
通过最左匹配原则你可以定义一个联合索引
但是使得多数查询条件都可以用到该索引
值得注意的是
当遇到范围查询(>、<、between、like)就会停止匹配
select * from t where a=1 and b>1 and c =1;
索引底层原理
B+树
B+树将所有的非叶子节点的索引都存放在叶子节点
并且还增加了顺序访问的指针
每个叶子节点都有指向相邻叶子节点的指针
这样当其他操作或者大量数据查询时
可以大大减少对I/O磁盘的读取操作
减少对磁盘的I/O操作
所以选B+树更合适作为数据库的索引
包含两种类型结点
内部结点(也称索引结点)
叶子结点
根结点
本身即可以是内部结点
也可以是叶子结点
关键字个数最少可以只有1个
B+树与B树最大的不同
内部结点不保存数据
只用于索引
所有数据(或者说记录)都保存在叶子结点中
m阶B+树表示
内部结点最多有m-1个关键字
或者说内部结点最多有m个子树
阶数m同时限制
叶子结点最多存储m-1个记录
内部结点中的key都按照从小到大的顺序排列
对于内部结点中的一个key
左树中的所有key都小于它
右子树中的key都大于等于它
叶子结点中的记录也按照key的大小排列
每个叶子结点
都存有相邻叶子结点的指针
叶子结点本身
依关键字的大小
自小而大顺序链接
一颗5阶B树的插入过程
5阶B数的结点
最少2个key
最多4个key
范围查询
范围查询右边的所有列索引将失效
在索引列上进行运算操作
索引失效
底层的隐式类型转换
相当于进行了运算操作
字符串要加单引号 ''
尽量使用覆盖索引
避免 select 尽量使用覆盖索引
只访问索引的查询(索引列完全包含查询列)
减/少select*
用or分割开的条件
如果or前的条件中的列有索引
而后面的列中没有索引
那么涉及的索引都不会被用到
以%开头的Like模糊查询
如果仅仅是尾部模糊匹配
索引不会失效
如果是头部模糊匹配
解决方法
覆盖索引
在 select 中加索引列
0 条评论
回复 删除
下一页