当前位置: 首页 > 工具软件 > InnoDB > 使用案例 >

innodb和myisam的区别

滕英奕
2023-12-01

MyIsam

myisam 是MySQL 5.5.5 之前的默认引擎,它支持B-tree/FullTex/R-tree索引类型。

锁级别为表锁,表锁优点 是:开销小,加锁快;缺点是:锁粒度大,发生冲突概率高,高容纳并发能力低,适合查询为主的业务。

此引擎不支持事务,也不支持外键。

myisam强调了快速读取操作。它存储表的行数,于是select count(*)from table时,只需要直接读取已经保存好的值而不需要全表扫描。

innodb

最大的亮点就是支持事务,支持回滚,支持hash/B-tree索引类型。

锁级别为行级锁,行级锁优点时适用于高并发的频繁表修改,高并发性能优于myisam.缺点是:系统消耗较大,索引不仅缓存自身,也缓存数据,相比Myisam需要更大的内存。

innodb中不保存表的具体行数,也就是说,执行 select count(*)from table时,innodb需要扫描一边整个表来计算有多少行。

支持事务,支持外键。

具体细节比较如下:

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

学习地址:https://juejin.im/post/58d482e844d904006929aaff
https://juejin.im/post/5b1685bef265da6e5c3c1c34

 类似资料: