Mysql学习笔记一 - 索引

索引介绍

正确的创建合适的索引是提升数据库查询性能的基础。

索引是什么

索引是为了加速对表中数据行的检索而创建的一种分散存储的
数据结构
Mysql学习笔记一 - 索引_第1张图片

为什么要用索引

索引能极大的减少存储引擎需要扫描的数据量
索引可以把随机IO变成顺序IO
索引可以帮助我们在进行分组、排序等操作时,避免使
用临时表

为什么选择B+Tree

二叉查找树,Binary Search Tree

Mysql学习笔记一 - 索引_第2张图片

平衡二叉查找树,Balanced binnary search tree

Mysql学习笔记一 - 索引_第3张图片

缺点:

  • 它太深了
    数据处的(高)深度决定着他的IO操作次数,IO操作耗时大
  • 它太小了
    每一个磁盘块(节点/页)保存的数据量太小了 没有很好的利用操作磁盘IO的数据交换特性, 也没有利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作

多路平衡查找树,B-Tree

Mysql学习笔记一 - 索引_第4张图片

加强版多路平衡查找树,B+Tree

Mysql学习笔记一 - 索引_第5张图片

B+Tree 和 B-Tree 的区别

1,B+节点关键字搜索采用闭合区间
2,B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
3,B+关键字对应的数据保存在叶子节点中
4,B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系

为什么要用B+Tree

B+树是B-树的变种(PLUS版)多路绝对平衡查找树,他拥有B-树的优势
B+树扫库、表能力更强
B+树的磁盘读写能力更强
B+树的排序能力更强
B+树的查询效率更加稳定

B+Tree在两大引擎中如何体现

Mysql 中B+Tree索引体现形式 —— Myisam

Mysql学习笔记一 - 索引_第6张图片
Mysql学习笔记一 - 索引_第7张图片

Mysql 中B+Tree索引体现形式 —— Innodb

Mysql学习笔记一 - 索引_第8张图片
Mysql学习笔记一 - 索引_第9张图片

Innodb VS Myisam

Mysql学习笔记一 - 索引_第10张图片

索引知识补充

列的离散型

Mysql学习笔记一 - 索引_第11张图片

最左匹配原则

Mysql学习笔记一 - 索引_第12张图片

联合索引

Mysql学习笔记一 - 索引_第13张图片

案例

Mysql学习笔记一 - 索引_第14张图片

覆盖索引

如果查询列可通过索引节点中的关键字直接返回,则该索引称之为
覆盖索引。
覆盖索引可减少数据库IO,将随机IO变为顺序IO,可提高查询性能

总结及验证

  • 索引列的数据长度能少则少。
  • 索引一定不是越多越好,越全越好,一定是建合适的。
  • 匹配列前缀可用到索引 like 9999%,like %9999%、like %9999用不到索引;
  • Where 条件中 not in 和 <>操作无法使用索引;
  • 匹配范围值,order by 也可用到索引;
  • 多用指定列查询,只返回自己想到的数据列,少用select *;
  • 联合索引中如果不是按照索引最左列开始查找,无法使用索引;
  • 联合索引中精确匹配最左前列并范围匹配另外一列可以用到索引;
  • 联合索引中如果查询中有某个列的范围查询,则其右边的所有列都无法使用索引;

你可能感兴趣的:(数据库)