参考资料:
- ***blogs.com/zengkefu/p/5647279.html---hash索引和b+tree索引
主流的还是使用B+树索引比较多,对于哈希索引,InnoDB是自适应哈希索引的(hash索引的创建由InnoDB存储引擎引擎自动优化创建,我们干预不了)!

文章插图
参考资料:
- ***/doctor_who2004/article/details/77414742
简单概括:
- 聚集索引就是以主键创建的索引非聚集索引就是以非主键创建的索引
- 聚集索引在叶子节点存储的是表中的数据非聚集索引在叶子节点存储的是主键和索引列使用非聚集索引查询出数据时,拿到叶子上的主键再去查到想要查找的数据 。(拿到主键再查找这个过程叫做回表)
非聚集索引在建立的时候也未必是单列的,可以多个列来创建索引 。
- 此时就涉及到了哪个列会走索引,哪个列不走索引的问题了(最左匹配原则-->后面有说)创建多个单列(非聚集)索引的时候,会生成多个索引树(所以过多创建索引会占用磁盘空间)

文章插图
在创建多列索引中也涉及到了一种特殊的索引-->覆盖索引
- 我们前面知道了,如果不是聚集索引,叶子节点存储的是主键+列值最终还是要“回表”,也就是要通过主键再查找一次 。这样就会比较慢覆盖索引就是把要查询出的列和索引是对应的,不做回表操作!
- 现在我创建了索引(username,age),在查询数据的时候:select username , age from user where username = 'Java3y' and age = 20 。很明显地知道,我们上边的查询是走索引的,并且,要查询出的列在叶子节点都存在!所以 , 就不用回表了~所以,能使用覆盖索引就尽量使用吧~
最左匹配原则:
- 索引可以简单如一个列(a) , 也可以复杂如多个列(a, b, c, d),即联合索引 。如果是联合索引,那么key也由多个列组成,同时,索引只能用于查找key是否存在(相等),遇到范围查询(>、<、between、like左匹配)等就不能进一步匹配了 , 后续退化为线性查找 。因此,列的排列顺序决定了可命中索引的列数 。
- 如有索引(a, b, c, d),查询条件a = 1 and b = 2 and c > 3 and d = 4,则会在每个节点依次命中a、b、c,无法命中d 。(会一直向右匹配直到遇到范围查询(>,<,BETWEEN,LIKE)就停止匹配)
不需要考虑=、in等的顺序,mysql会自动优化这些条件的顺序 , 以匹配尽可能多的索引列 。
例子:
- 如有索引(a, b, c, d) , 查询条件c > 3 and b = 2 and a = 1 and d < 4与a = 1 and c > 3 and b = 2 and d < 4等顺序都是可以的,MySQL会自动优化为a = 1 and b = 2 and c > 3 and d < 4,依次命中a、b、c 。
索引在数据库中是一个非常重要的知识点!上面谈的其实就是索引最基本的东西,要创建出好的索引要顾及到很多的方面:
- 1,最左前缀匹配原则 。这是非常重要、非常重要、非常重要(重要的事情说三遍)的原则,MySQL会一直向右匹配直到遇到范围查询(>,<,BETWEEN,LIKE)就停止匹配 。3,尽量选择区分度高的列作为索引 , 区分度的公式是 COUNT(DISTINCT col) / COUNT(*) 。表示字段不重复的比率 , 比率越大我们扫描的记录数就越少 。4,索引列不能参与计算,尽量保持列“干净” 。比如,FROM_UNIXTIME(create_time) = '2016-06-06' 就不能使用索引,原因很简单,B+树中存储的都是数据表中的字段值,但是进行检索时,需要把所有元素都应用函数才能比较,显然这样的代价太大 。所以语句要写成 : create_time = UNIX_TIMESTAMP('2016-06-06') 。5,尽可能的扩展索引 , 不要新建立索引 。比如表中已经有了a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可 。6,单个多列组合索引和多个单列索引的检索查询效果不同,因为在执行SQL时,MySQL只能使用一个索引,会从多个单列索引中选择一个限制最为严格的索引 。
- ***/p/23624390--简单理解索引***/mysteryhaohao/article/details/51719871-- MySQL学习之——索引(普通索引、唯一索引、全文索引、索引匹配原则、索引命中等)https://monkeysayhi.github.io/2018/03/06/%E6%B5%85%E8%B0%88MySQL%E7%9A%84B%E6%A0%91%E7%B4%A2%E5%BC%95%E4%B8%8E%E7%B4%A2%E5%BC%95%E4%BC%98%E5%8C%96/---浅谈MySQL的B树索引与索引优化
推荐阅读
- 林正英葬礼两大诡异事件,曾留古怪遗言:千万别让人看见我的尸体
- 低温烫伤神器有哪些 保暖神器真的会导致低温烫伤吗
- 这一次父亲节,王健林迎来了“两大喜讯”!
- 《扫黑风暴》徐英子、马帅之死,两大嫌疑人浮出水面,导演用心了
- 00级神器可以继承
- 《超新星运动会》官宣回归,嘉宾阵容曝光,两大顶流助阵成焦点!
- 游泳耳朵不进水小窍门 游泳防耳朵进水的神器
- 两大动作巨星李连杰和吴京会面,疑合作新片《镖人》,期待值拉满
- 目的基因的获取方法3种,获取目的基因的两大途径是什么
- 40集《时光正好》今晚开播,演员阵容强大,两大看点,有爆款潜质