InnoDB与MyISAM的区别(详细)

9次阅读

共计 812 个字符,预计需要花费 3 分钟才能阅读完成。

一、InnoDB 的特点

支持行锁,采用 MVCC 来支持高并发,有可能死锁
支持事务
支持外键
支持崩溃后的安全恢复
不支持全文索引

B+Tree 叶节点的 data 域存放的是数据记录的地址。在索引检索的时候,首先按照 B +Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。

二、MyISAM 的特点

不支持行锁(MyISAM 只有表锁)
不支持事务
不支持外键
不支持崩溃后的安全恢复
支持 BLOB 和 TEXT 的前 500 个字符索引,支持全文索引

对于不会进行修改的表,支持压缩表,极大地减少了磁盘空间的占用
其数据文件本身就是索引文件。相比 MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按 B +Tree 组织的一个索引结构,树的叶节点 data 域保存了完整的数据记录。这个索引的 key 是数据表的主键,因此 InnoDB 表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引,辅助索引的 data 域存储相应记录主键的值而不是地址,这也是和 MyISAM 不同的地方。在根据主索引搜索时,直接找到 key 所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引。因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。

三、关于二者的对比和总结
MyISAM 强调的是性能,每次查询具有原子性, 其执行速度比 InnoDB 类型更快,但是不提供事务支持。但是 InnoDB 提供事务支持事务,外部键等高级数据库功能。具有事务 (commit)、回滚(rollback) 和崩溃修复能力 (crash recovery capabilities) 的事务安全 (transaction-safe (ACID compliant)) 型表。MyISAM 更适合读密集的表,而 InnoDB 更适合写密集的的表

正文完
 0