zoukankan      html  css  js  c++  java
  • 聚簇索引和非聚簇索引

    在Mysql中,有两大常用的存储引擎MyisAm和Innodb,聚集索引和非聚集索引用的是B+树索引
    InnoDb使用的是聚集索引,Myisam使用的是非聚集索引也叫非聚簇索引

    一、聚集索引也叫聚簇索引
         1、聚集索引的缺点是修改时需要保持表中记录和索引的顺序需要一致,在插入新记录的时候就会对数据也重新做一次排序
         2、表纪录的排列顺序和索引排列顺序保持一致,由于连续存放 所以查询效率相当快
         3、数据表创建上INNODB聚集索引存储的是一个文件,后缀为.frm  、ibd数据
         innodb引擎通过搜索树方式实现索引,索引类型分为主键索引(聚集索引)和 二级索引(非主键索引)
         主键索引树中,叶子结点保存着主键即对应行的全部数据
         二级索引树中,叶子结点保存着索引值和主键值(先通过普通索引定位到主键值id=1;在通过主键索引定位到行记录;这个过程会有回表查询)
         当使用二级索引进行查询时,需要进行回表操作

         避免回表方式:
         覆盖索引: 查询的列和查询条件的列全部包含在一个索引中,可以直接使用索引查询而不需要回表。这就是覆盖索引
         覆盖索引是指索引中的列包含了数据处理中涉及的所有列,覆盖索引相当原始表的一个子集
         通过使用覆盖索引,可以减少搜索树的次数,是常用的性能优化手段
    例1:
        name是一个索引:select id from table where name = aaa
        由于name索引树的叶子结点上保存有name和id的值,通过name索引树查找到id后 就不需要在主键索引去查找了
    例2:name是一个索引:select pwd from user_table where name = aaa
        1、name索引树上找到name=aaa对应的主键id
        2、通过回表在主键索引树上找到满足条件的数据
        可以组建联合索引(name, pwd),这样,查询的时候就不需要再去回表操作了,可以提高查询效率

    注意在做覆盖时的前缀索引:
        mysql的b+树索引遵循“最左前缀”原则
        联合索引(name,pwd)注意查询顺序
        例1:where name = '张三' and pwd = '123'

    二、非聚集索引
        1、非聚集索引的索引的层次比较多,但是不会造成数据的重排
        2、数据表创建上Myisam存储为三个文件.frm(表结构)、.MYD(数据)、.MYI(索引)
        3、MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址
        非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,二级索引无需再根据ID索引
        根据MYI文件里存储的物理地址 - > 找到对应的数据

    群交流(262200309)
  • 相关阅读:
    没有项目种类分配到科目XXX
    编制总账科目凭证技巧(贷方)
    设置雇员容差组
    设定容差组
    英语-20210226
    如何流利说英语
    英语-20210225
    EPS(每股盈余)
    大本力量训练法
    拓端tecdat|R语言逻辑回归分析连续变量和分类变量之间的“相关性“
  • 原文地址:https://www.cnblogs.com/webster1/p/12353272.html
Copyright © 2011-2022 走看看