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中,只有辅助索引; 聚集索引:数据直接存储在树结构的叶子
      • 主键创建的索引是聚集索引 其他键创建的索引都是辅助索引

    • 辅助索引

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

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

      • 回表:通过辅助索引查到主键之后,去查聚集索引,就叫回表;
  • 相关阅读:
    尾递归优化
    EOS Dawn 3.0 智能合约 -- 新格式
    以太坊钱包初探
    理解以太坊的椭圆曲线签名-校验签名
    以太坊交易字段
    以太坊的账户和交易
    以太坊源码探究之交易与签名
    以太坊交易签名
    L05 Laravel 教程
    thinkphp3.2配置redis缓存和文件缓存
  • 原文地址:https://www.cnblogs.com/bigox/p/11703328.html
Copyright © 2011-2022 走看看