一.什么是索引
索引是mysql的一种数据结构,这种数据结构称之为key,大白话说索引就是一种数据的组织方式
表中的一行行数据按照索引规定的结构组织成了一种树形结构,该树叫B+树
二.为何要用索引
优化查询速度
三.如何正确看待索引
错误的认知
1.软件上线之后,运行了一段时间,发现软件运行很卡,想到要加索引。火烧眉毛再想着加索引,光把问题定位到索引身上就耗费很长时间,排查成本很高
最好是在软件开发之初配合开发人员,定位常用的查询字段,然后为该字段提前创建索引
2.索引越多越好
索引是用于加速查询的,降低写效率
如果某一张表的ibd文件中创建了很多颗索引树,意味着很小一个update语句就会导致很多颗索引叔都需要发生变化,从而把硬盘io打上去
四.储备知识
1.索引根本原理就是把硬盘io次数降下来
为一张表中的一行行记录创建索引就好比为书的一页页内容创建目录
有了目录结构之后,我们以后的查询都应该通过目录去查询
2.一次磁盘io带来的影响
7200转/分钟,120转/s
一次io的延迟时间=平均寻道时间(5ms)+平均延迟时间(4ms)——>9ms
3.磁盘预读
一页就是一个磁盘块
innodb存储引擎一页16k,即一次io读16k到内存中
五.索引分类
六.创建索引的俩个步骤
create index xxx on user(id);
1.提取索引字段的值当作key,value就是对应的本行记录
10————>10zs
7————>7ls
13————>13ww
2.以key的为基础比较大小,生成树型结构
七.B+
二叉树—>平衡二叉树—>B树—>B+树
leaf node:叶子节点
non-leaf node:根节点,树枝节点
create index xxx on user(id)