是什么
在MySQL进行查询时,需要将全部数据加载到内存之中,然后以页的形式进行遍历查询,这样的查询效率太低,于是有了索引这个概念,索引类似于目录,将数据关键字整理为索引,通过索引查询数据会大大提高查询效率
分类
物理存储
不同的存储引擎的索引类型不同
MyISAM使用聚簇索引
InnoDB使用非聚簇索引
聚簇索引
聚簇索引是通过索引聚集数据生成,默认使用主键,没有主键则使用非空唯一索引,没有唯一索引则使用六个字节的rowId充当主键,而数据是存储在树的叶子节点的data域之中
回表:辅助索引的叶子节点的data域存储的是主键索引的索引值。在查询数据时,需要先定位获取主键索引的索引值,然后通过这个索引值在主键索引结构之中查询数据
非聚簇索引
索引和数据分开存放
数据结构
B+tree,B Tree,Hash,红黑树,B+tree 是MySQL中被存储引擎采用最多的索引类型。
B+Tree与B Tree的区别
B+Tree
-
数据存储在叶子节点之中
-
节点包含的信息
-
关键字
-
指向下一层的指针
-
B Tree
-
节点包含的信息
-
关键字
-
指向对应数据的指针
-
指向下一层的指针
-
对比总结
- B+Tree每一个节点会存储更多的信息,相对于B Tree来说可以使用更少的IO次数读取到更多的数据
- B+Tree将数据都整合在了叶子节点,更方便与对数据进行统一处理
B+Tree与红黑树的区别
红黑树是平衡二叉树,但因为是二叉树,那么B+Tree相对于红黑树来说会深度会更大,进一步说就是红黑树检索到目标数据需要的磁盘IO次数会更多
B+Tree与HASH的区别
Hash查询数据的效率非常高,可以一次进行定位,不像B+Tree需要从根结点到叶子节点。
但是Hash结构的缺点在于他不能进行范围搜索,Hash结构是通过数据的hash值来进行定位,所以不能用于范围查找,只能用于查询确定的值。
为什么
优点
可以有效提高查询效率
缺点
索引有专门的索引表,占用空间
每次数据更新都需要对相应索引进行更新
怎么用(索引优化)
-
开启慢日志,获取需要进行优化的SQL语句
-
使用 explain 分析SQL语句
俩个关键字段
-
type
值为all,表示为全表查询,可以优化
-
extra
Using fileSort,表示排序没使用索引,可以优化
-
-
添加索引