MySQL存储引擎MyISAM与InnoDB的区别比较

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_32828933/article/details/83058248

使用MySQL当然会接触到MySQL的存储引擎,在新建数据库和新建数据表的时候都会看到。

MySQL的默认引擎5.7以前是MyISAM,5.7以后是InnoDB。建议使用InnoDB。

至于到底用哪种存储引擎比较好?这个问题没有定论,需要根据你的需求和环境来衡量。所以对这两种引擎的概念、原理、异同和各自的优劣点有了详细的了解之后,再根据自己的情况选择起来就容易多了。

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

猜你喜欢

转载自blog.csdn.net/qq_32828933/article/details/83058248