美文网首页
Mysql的MyISAM和innodb对比

Mysql的MyISAM和innodb对比

作者: 秦汉邮侠 | 来源:发表于2019-11-03 12:47 被阅读0次

结论

MyISAM 和 InnoDB的适用场景
MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,查询非常频繁;(3)没有事务。
MyISAM适合OLAP场景

InnoDB适合:(1)可靠性要求比较高,或者要求事务;(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
InnoDB适合OLTP场景

MyISAM 和 InnoDB的区别
1)MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持

2)mysiam表不支持外键

3)在执行数据库写入的操作(insert,update,delete)的时候,mysiam表会锁表,而innodb表会锁行

4)当你的数据库有大量的写入、更新操作而查询比较少或者数据完整性要求比较高的时候就选择innodb表。

5)当你的数据库主要以查询为主,相比较而言更新和写入比较少,并且业务方面数据完整性要求不那么严格,就选择mysiam表。因为mysiam表的查询操作效率和速度都比innodb要快。

存储结构

  • MyISAM
    每张表被存放在三个文件:
    frm-表格定义
    MYD(MYData)-数据文件
    MYI(MYIndex)-索引文件
    MyISAM是堆

  • InnoDB
    所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB

存储空间

  • MyISAM
    可被压缩,存储空间较小

  • InnoDB
    需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引

可移植性、备份及恢复

  • MyISAM
    由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作

  • InnoDB
    免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了

  • 事务安全

  • MyISAM
    不支持 每次查询具有原子性

  • InnoDB
    支持 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表

AUTO_INCREMENT

  • MyISAM
    MyISAM表可以和其他字段一起建立联合索引

  • InnoDB
    InnoDB中必须包含只有该字段的索引

SELECT

MyISAM更优

INSERT

InnoDB更优

UPDATE

InnoDB更优

DELETE

InnoDB更优 它不会重新建立表,而是一行一行的删除

COUNT without WHERE

MyISAM更优。因为MyISAM保存了表的具体行数

InnoDB没有保存表的具体行数,需要逐行扫描统计,就很慢了

COUNT with WHERE

一样

一样,InnoDB也会锁表

只支持表锁

支持表锁、行锁 行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的

外键

不支持

支持

FULLTEXT全文索引

支持

不支持 可以通过使用Sphinx从InnoDB中获得全文索引,会慢一点

frm-表格定义
MYD(MYData)-数据文件
MYI(MYIndex)-索引文件
所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB 存储空间 MyISAM可被压缩,存储空间较小 InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引 可移植性、备份及恢复 由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作 免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了 事务安全 不支持 每次查询具有原子性 支持 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表 AUTO_INCREMENT MyISAM表可以和其他字段一起建立联合索引 InnoDB中必须包含只有该字段的索引 SELECT MyISAM更优 INSERT InnoDB更优 UPDATE InnoDB更优 DELETE InnoDB更优 它不会重新建立表,而是一行一行的删除 COUNT without WHERE MyISAM更优。因为MyISAM保存了表的具体行数 InnoDB没有保存表的具体行数,需要逐行扫描统计,就很慢了 COUNT with WHERE 一样 一样,InnoDB也会锁表 锁 只支持表锁 支持表锁、行锁 行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的 外键 不支持 支持 FULLTEXT全文索引 支持 不支持 可以通过使用Sphinx从InnoDB中获得全文索引,会慢一点

总的来说,MyISAM和InnoDB各有优劣,各有各的使用环境。

但是InnoDB的设计目标是处理大容量数据库系统,它的CPU利用率是其它基于磁盘的关系数据库引擎所不能比的。

我觉得使用InnoDB可以应对更为复杂的情况,特别是对并发的处理要比MyISAM高效。同时结合memcache也可以缓存SELECT来减少SELECT查询,从而提高整体性能。

参考来源

相关文章

  • mysql,MyISAM和InnoDB对比

    MyISAM和 innodb 的实现上的区别? 1.一个聚簇一个非聚簇 聚簇索引保证关键字的值相近的元组存储的物...

  • 2018-03-19

    mysql MyISAM引擎和InnoDB的介绍 1、MyISAM MyISAM是MySQL的默认存储引擎,基于...

  • Mysql的MyISAM和innodb对比

    结论 MyISAM 和 InnoDB的适用场景MyISAM适合:(1)做很多count 的计算;(2)插入不频繁,...

  • 彻底搞懂MySQL的索引

    前言 MyISAM和InnoDB是MySQL最常用的两个存储引擎,本文将进行详尽的介绍和对比。对于MySQL其余几...

  • 一文彻底搞懂MySQL索引

    前言 MyISAM和InnoDB是MySQL最常用的两个存储引擎,本文将进行详尽的介绍和对比。对于MySQL其余几...

  • 引擎 | ARCHIVE

    mysql常用引擎MyISAM和InnoDB MyISAM:插入快 查询快 InnoDB:修改快 支持事务 ARC...

  • MySQL的存储引擎

    MySQL的存储引擎 1.查看所有引擎 将结果列成表格 InnoDB和MyISAM对比 *(MylSAM的压缩表必...

  • MySQL学习日记(十一)-技术问答

    一、MySQL主要存储引擎MyISAM和InnoDB的区别? 1、 存储结构 MyISAM:每个MyISAM在磁盘...

  • MySQL常用的两种存储引擎

    mysql有两种存储引擎:InnoDB和MyISAM。mysql5.5之前是默认MyISAM,mysql5.5之后...

  • mysql(七)

    MySQL存储引擎-innodb 查看存储引擎 innodb和myisam的物理区别 innodb 核心特性 MV...

网友评论

      本文标题:Mysql的MyISAM和innodb对比

      本文链接:https://www.haomeiwen.com/subject/betnkftx.html