Mysql InnoDB和MyISAM的区别

时间:425次浏览2018.06.27提问

Mysql InnoDB和MyISAM的区别

已解决问题

hao231知道平台可亲可爱的匿名用户网友在425次浏览2018.06.27提问提了关于数据库IT技术相关的问题,他的提问知道Mysql InnoDB和MyISAM的区别数据库IT技术希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,谢了,下次有事儿别忘了找我 !

第1个回答

雪糕在不在2019.07.19回答一、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)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(ACIDcompliant))型表。MyISAM更适合读密集的表,而InnoDB更适合写密集的的表