Mysql索引认识

与世无争的帅哥 提交于 2020-04-28 13:41:42

  
                  全网最简单理解的索引
  

一个面试题引发
user表 name字段 创建基于name唯一索引,那么下面的会走索引吗?
select * from user where name like '%abc'
答案是走或者不走,不同时候不同讨论。


Mysql索引认识
Mysql索引认识

如何选择加还是不加索引呢,某列去重数据/count数据=值,这个值越小,越用不到索引,

Mysql索引认识

三星索引基本上也是这些内容,
Mysql索引认识
那么索引是什么?


帮助Mysql提高查询数据效率的,存储在硬盘中的一种数据结构
资料经常讲到“参考”书的目录,书有目录,占用几页的空间,通过目录可以快速的找到需要的内容信息,
这就是索引特点:通过物理空间,换取执行时间

数据结构在线测试网站https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

索引可能根据不同的存储引擎有不同的类型,主要Hash B+Tree
知道Hash 需要了解HashMap
什么是HashMap??????


B+Tree 需要了二叉查找和平衡二叉树 B树演化而来。

二分查找集折半查找
Mysql索引认识
二叉查找
Mysql索引认识









如果按顺序找235678,找到8肯定次数就多了。发现如果就是按id自增顺序插入数据,那么可能不是这种图形了。

Mysql索引认识

引出了一种平衡二叉树:满足二叉树定义,左子树小于右子树,同时任何节点的两个子树的高度差最大为1,

Mysql索引认识

问题是什么呢,平衡二叉树每次插入和更新都需要调整平衡,通过左旋或者右旋,所以维护成本比较高,好在这个多用于内存结构中,相对开销小点

B树图
Mysql索引认识
B+Tree图
Mysql索引认识




聚集索引,每张表的主键构造的一颗B+Tree树,只能有一个,多数情况查询优化器倾向于这个聚集索引,
联合索引,对表上的多个字段进行索引,记住最左匹配
     另外注意比如创建了联合索引abc where条件 b='4' and a='1'同样也会使用,为什么优化器做了选择。
覆盖索引,不需要回表操作。
Mysql索引认识



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!