zoukankan      html  css  js  c++  java
  • MySQL的索引原理(图解)

    数据库的索引原理

    0.什么是索引

    ​ 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,但是会降低写入速度。

    • show index from table_name; 查看索引
    • create index 索引名字 on 表(字段); 创建辅助索引
    • drop index 索引名字 on 表(字段); 删除索引

    1.索引类型

    1.0.全文索引(FULLTEXT)

    MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;

    1.1普通索引

    辅助索引

    1.2. 唯一索引

    与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

    1.3. 主键索引

    聚集索引

    1.4. 单列索引、多列索引

    多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

    1.5. 组合索引(最左前缀)

    联合索引

    2.数据库索引原理

    • B树结构(blance tree) 根--节点--分支--叶

    • B+树

      #b+树 在b树的基础上进行了改良 -
      -1. 分支节点和根节点都不再存储实际的数据了,让分支和根节点能存储更多的索引的信息,就降低了树的高度,
      所有的实际数据都存储在叶子节点中
      -2. 在叶子节点之间加入了双向的链式结构(双向链表)方便在查询中的范围条件
      -3. mysql中,所有的b+树索引的高度基本控制在3层 
      

    第一层存 1-10000的地址,10001-20000的地址,20001-30001的地址。。
    第二层存 1-1000,1001-2000...90001-100001地址。。
    第三层存 1,msg,jjj; 2,msg,kkkk;...并且第三层是一个双向链表,大大缩减了查询次数
    
    • b+树的高度会影响索引的效率,树的高度影响因素

      • 1.选择尽量短的列做索引;每一个节点的存储的信息越多,树的高度也就越低,效率也就越快;
      • 2.对区分度高的列做索引,重复率超过10%不适合;
    • 聚集索引

      • 在innodb中,聚集索引和辅助索引并存,在myisam中,只有辅助索引; 聚集索引:数据直接存储在树结构的叶子
      • 主键创建的索引是聚集索引 其他键创建的索引都是辅助索引

    • 辅助索引

      • 数据不存在树中
      • 叶子节点中存的主键,再通过一次或者多次查到数据;

    • 辅助索引和聚集索引的配合使用(回表)

      • 回表:通过辅助索引查到主键之后,去查聚集索引,就叫回表;
  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/bigox/p/11703328.html
Copyright © 2011-2022 走看看