全网最简单理解的索引
一个面试题引发
user表 name字段 创建基于name唯一索引,那么下面的会走索引吗?
select * from user where name like '%abc'
答案是走或者不走,不同时候不同讨论。
如何选择加还是不加索引呢,某列去重数据/count数据=值,这个值越小,越用不到索引,
三星索引基本上也是这些内容,
那么索引是什么?
帮助Mysql提高查询数据效率的,存储在硬盘中的一种数据结构。
资料经常讲到“参考”书的目录,书有目录,占用几页的空间,通过目录可以快速的找到需要的内容信息,
这就是索引特点:通过物理空间,换取执行时间。
数据结构在线测试网站https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
索引可能根据不同的存储引擎有不同的类型,主要Hash B+Tree
知道Hash 需要了解HashMap
什么是HashMap??????
B+Tree 需要了二叉查找和平衡二叉树 B树演化而来。
二分查找集折半查找
二叉查找
如果按顺序找235678,找到8肯定次数就多了。发现如果就是按id自增顺序插入数据,那么可能不是这种图形了。
引出了一种平衡二叉树:满足二叉树定义,左子树小于右子树,同时任何节点的两个子树的高度差最大为1,
问题是什么呢,平衡二叉树每次插入和更新都需要调整平衡,通过左旋或者右旋,所以维护成本比较高,好在这个多用于内存结构中,相对开销小点
B树图
B+Tree图
聚集索引,每张表的主键构造的一颗B+Tree树,只能有一个,多数情况查询优化器倾向于这个聚集索引,
联合索引,对表上的多个字段进行索引,记住最左匹配
另外注意比如创建了联合索引abc where条件 b='4' and a='1'同样也会使用,为什么优化器做了选择。
覆盖索引,不需要回表操作。
来源:oschina
链接:https://my.oschina.net/u/4263597/blog/4256629