• InnoDB 和 MyISAM 的索引


    转自:https://blog.csdn.net/qq_39871711/article/details/105356927

    1.索引组织

     InnoDB 是将索引和数据都存储到了一个文件中ibd类型,MyISAM 存储到了两个文件,MYD存储数据,MYI存储索引。

    yISAM 引擎把数据和索引分开了,一人一个文件,这叫做非聚集索引方式;Innodb 引擎把数据和索引放在同一个文件里了,这叫做聚集索引方式。【??聚集和非聚集不是针对是否对主键来说的吗?】

    2.Innodb 引擎的底层实现(聚集索引方式)

     InnoDB 是聚集索引方式,因此数据和索引都存储在同一个文件里。

    首先 InnoDB 会根据主键 ID 作为 KEY 建立索引 B+树,这是建表的时候 InnoDB 就会自动建立好主键 ID 索引树,这也是为什么 Mysql 在建表时要求必须指定主键的原因。

    2.1 当我们为表里某个字段加索引时 InnoDB 会怎么建立索引树呢?如user_name ?

    那么 InnoDB 就会建立 user_name 索引 B+树,节点里存的是 user_name 这个 KEY,叶子节点存储的数据的是主键 KEY。

    拿到主键 KEY 后,InnoDB 才会去主键索引树里根据刚在 user_name 索引树找到的主键 KEY 查找到对应的数据。

    2.2 为什么要多此一举?

    InnoDB 需要节省存储空间。

    一个表里可能有很多个索引,InnoDB 都会给每个加了索引的字段生成索引树,如果每个字段的索引树都存储了具体数据,那么这个表的索引数据文件就变得非常巨大(数据极度冗余了)。

    3.MyISAM 引擎的底层实现(非聚集索引方式)

    MyISAM 在建表时以主键作为 KEY 来建立主索引 B+树,树的叶子节点存的是对应数据的物理地址。我们拿到这个物理地址后,就可以到 MyISAM 数据文件中直接定位到具体的数据记录了。 

    3.1 为字段添加索引?

    当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点同样是记录了对应数据的物理地址,然后也是拿着这个物理地址去数据文件里定位到具体的数据记录。

    4.什么字段适合添加索引?

    1. 较频繁的作为查询条件的字段应该创建索引;

    2. 唯一性太差的字段不适合单独创建索引,即使该字段频繁作为查询条件;

    3. 更新非常频繁的字段不适合创建索引。

  • 相关阅读:
    smarty对网页性能的影响--开启opcache
    1stopt8.0 代码示例
    1stopt、matlab和python用morris、sobol方法实现参数敏感性分析
    MATLAB 实现sobol参数敏感性分析
    matlab中自带的sobol的函数提供的sobol序列
    matlab和fortran混合编程
    mathematic语法基础
    fortran常用语句--读写带注释文档、动态数组等语法
    fortran语言调用fortran写的dll
    C语言函数指针与 c#委托和事件对比
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/15010249.html
Copyright © 2020-2023  润新知