• MySQL存储引擎与索引


    引言:

      MySQL存储引擎主要分为 InnoDB 存储引擎与 MyISAM 存储引擎。都采用B+数的存储结构。

    应用场景:

      InnoDB适合:(1)可靠性要求比较高,要求事务;(2)大量 insert update 。

      MyISAM适合:(1)没有事务。(2)插入不频繁,大量 select 。

    一、 InnoDB 存储引擎

      InnoDB 存储引擎是MySQL 的默认事物型引擎,是使用最广泛的存储引擎,采用聚簇索引

      1.支持ACID的事务,支持事务的四种隔离级别。

      2.支持行级锁(默认),也支持表级索。

      3. 主键索引采用聚簇索引(索引的数据域存储数据文件本身key+行记录),辅索引的数据域存储主键的值;因此从辅索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;最好使用自增主键,防止插入数据时,为维持B+树结构,文件的大调整。

        4. 不保存表的总行数

    二、 MyISAM 存储引擎

       MyISAM 存储引擎是MySQL最早的存储引擎之一,采用非聚簇索引,没有事物和行级锁。MyISAM对整张表加锁,读取时加共享锁,写入时加排他锁。

      1. 不支持事物。

      2. 支持表级锁,不支持行级锁。

      3.采用非聚簇索引,索引文件的数据域存储指向数据文件的指针。辅索引与主索引基本 一致,但是辅索引不用保证唯一性。

        4. 保存总行数,MyISAM:select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含   where条件时,两种表的操作是一样的

    三、聚簇索引与非聚簇索引的区别

      1. 聚簇索引的顺序就是数据的物理存储顺序,所以一个表最多只能有一个聚簇索引。如InnoDB主索引。

      2. 非聚集索引中的逻辑顺序并不等同于表中行的物理顺序,索引是指向表中行的位置的指针。如MyISAM 主索引与辅索引。

    四、索引的实现

      1. InnoDB 索引的实现

       InnoDB 采用B+ 树的存储结构,树的叶子节点保存了完整的数据记录,该行记录。

      InnoDB的辅助索引data域存储相应记录主键的值而不是地址。

      辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。

    图1. 主索引

    图2. 辅索引

       2. MyISAM 索引的实现

      MyISAM 存储引采用的是 B+ 树的数据结构。

      叶节点的data域存放的是数据记录的地址。

    图3. 主键索引

    图4. 辅助索引

     五、InnoDB 与 MyISAM 索引的区别

      1. InnoDB 使用的是聚簇索引,将主键组织到一棵 B+树中,而行数据就储存在叶子节 点上,若使用"whereid=14"这样的条件查找主键,则按照 B+树的检索算法即可查找到 对应的叶节点,之后获得行数据。若对 Name 列进行条件搜索,则需要两个步骤:第一步 在辅助索引 B+树中检索 Name,到达其叶子节点获取对应的主键。第二步使用主键在主 索引 B+树种再执行一次 B+树检索操作,最终到达叶子节点即可获取整行数据。
      2. MyISM 使用的是非聚簇索引,非聚簇索引的两棵 B+树看上去没什么不同,节点 的结构完全一致只是存储的内容不同而已,主键索引 B+树的节点存储了主键,辅助键索引 B+树存储了辅助键。表数据存储在独立的地方,这两颗 B+树的叶子节点都使用一个地址 指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通
    过辅助键检索无需访问主键的索引树。
      为了更形象说明这两种索引的区别,我们假想一个表如下图存储了 4 行数据。其中 Id 作为主索引,Name 作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的差异。

  • 相关阅读:
    git 操作
    移动端Web开发注意事项(响应式)
    jQuery插件通用写法
    关于清除浮动(BFC),float和inline-block
    js和css的顺序关系及js加载执行优化探索
    表单验证
    日期比较
    常用正则表达式
    js事件线程机制和异步执行
    阻止事件冒泡
  • 原文地址:https://www.cnblogs.com/yumingxing/p/9591638.html
Copyright © 2020-2023  润新知