码迷,mamicode.com
首页 > 数据库 > 详细

mysql myisam 和 innodb 的区别

时间:2020-12-31 12:22:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:col   sam   没有   image   取出   表数   定义   style   变化   



1. myisam 和 innodb 的区别

  1. 事务方面

    innodb 支持事务,myisam 不支持事务

  2. 外键方面

    innodb 支持外键,而 myisam 不支持。对一个包含外键的 innodb 表转为 myisam 会失败。

  3. 索引层面

    innodb 是聚簇索引,myisam 是非聚簇索引

    myisam 支持 fulltext类型的全文索引, innodb 不支持 FULLTEXT 类型的全文索引,但是 innodb 可以使用 sphinx 插件支持全文索引,并且效果更好。

  4. 锁粒度方面

    innodb 最小的锁粒度是 行锁 ,myisam 最小的锁粒度是 表锁

    一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。

  5. 硬盘存储结构

    myisam 在磁盘上存储成三个文件

    • . frm 文件存储表的定义
    • 数据文件 的扩 展名为 . MYD (MYData)。
    • 索引文件 的扩 展名是 . MYI (MYIndex)。

    innodb 存储引擎存储数据库数据,一共有两个文件(没有专门保存数据的文件):

    • Frm 文件:表的定义文件。
    • Ibd 文件:数据和索引存储文件。数据以主键进行聚集存储,把真正的数据保存在叶子节点中。

2. 局簇索引和非局簇索引的区别

  1. 聚簇索引(innodb)

    数据 存储与 索引 放到了一块,索引结构的 叶子节点 保存了 行数据

    表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。

    innodb 中,在聚簇索引之上创建的索引称之为辅助索引,像复合索引、前缀索引、唯一索引等等。

    • 聚簇索引默认是主键,
    • 如果表中没有定义主键,innodb 会选择一个 唯一的非空索引 代替。
    • 如果没有这样的索引,innodb 会在内部生成一个名为 GEN_CLUST_INDEX 的隐式的聚簇索引。
  2. 非聚簇索引(MyISAM)

    数据索引 分开存储,表数据存储顺序与索引顺序无关


2. 索引查询过程

  1. 非聚簇索引存储结构(MyISAM)

    技术图片
    MyISAM的 B+树 的叶子节点上,记录的是真实数据的存储地址。

    比如通过主键id查询,MyISAM查询流程如下:

    • 根据id值在B+树上找到相应的叶子节点
    • 取出叶子节点上的数据存储地址
    • 根据数据存储地址,去找到相应的真实数据

    通过主键id查询的时候,InnoDB比MyIsam快一些,因为InnoDB只需要一次B+树查找就能取出数据。MyIsam通过B+树查找到地址后,还需要根据地址去查询真正的数据

    还比如说在数据重构的时候,MyIsam记录的是数据地址,那么重构数据的时候地址就要重新生成一遍,这也是有问题的。

    InnoDB重构数据的时候就不会这样,因为他记录的是主键id,地址会变化,主键id是不会变的。

  2. 聚簇索引存储结构(innodb)

    技术图片
    InnoDB的 B+树 的叶子节点上,记录的是真实行数据。

    比如通过主键id查询,InnoDB查询流程如下:

    聚簇索引(主键索引):

    • 根据id值在B+树上找到相应的叶子节点
    • 取出叶子节点上的行数据,返回即可

    辅助索引(聚簇索引以外的):

    • 在相应索引的B+树上找到相应的叶子节点
    • 取出叶子节点上的数据,该数据是主键id
    • 拿到主键id后,去主键索引的B+树上找到相应的叶子节点
    • 取出叶子节点上的行数据,返回

mysql myisam 和 innodb 的区别

标签:col   sam   没有   image   取出   表数   定义   style   变化   

原文地址:https://www.cnblogs.com/linsonga/p/14154359.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!