MySQL存储引擎简介及MyISAM和InnoDB的区别

时间:2016.04.19 发布人:piscesnod2

MySQL存储引擎简介及MyISAM和InnoDB的区别

已解决问题

谷歌piscesnod2用户在2016.04.19提交了关于“光荣之路MySQL存储引擎简介及MyISAM和InnoDB的区别”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T11:55:38。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,滴水之恩,来日我当涌泉相报 !

希望以下的回答,能够帮助你。

第1个回答

用户名:sphjoy0718  

My问答ISAM:默认的MySQL插件式存储引擎,史它是在Web、**仓储和其他应用环境下最常使用的存储引擎之一。注意,通安著举不验明婷统汉开过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎哥须真倍困众。
InnoDB:用于事务处理应用程序,具有众多采们陆衡草既宁举特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有**保存在RAM中,在需要快速查找引用和其他类似**的环境下,可提供极快的访问。
Merge:允许MySQLDBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象朝居子权赶引用它们。对于诸如**仓储等V全立朝坏工放里究LDB环境十分适合。
Fe劳限北西些期刑derated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑**库。十分适合于分布式环境或**集市环境。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Cluster/NDB:MySQL的簇式**库引擎,尤需细国八夫雷宽其适合于具有高性能查非居绝论名再裂找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
Other:其他存储引擎包括CSV(引用由逗号隔开的用作**库表的文件),Blackhole(用于临时禁止对**库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。


MyS今书器终践肉确换QL:MyISAM和InnoDB的区别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各线宜含有优缺点,视具体应用而定。基本的差发广别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其力执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级**库功能。

MyIASM是IASM表的新版本,有如下扩展:

二进制层次的可移植性。
**LL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
触打否婷乱更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。

以下是一些细节和具体实现的差别:

1.Inn皇起省复oDB不支持FULLTEXT类型的索引(目前只有MyISAM表支持,且只能续火约稳三视老用在Ch**AR,VARCh**A盟免身帝的好部反味R,TEXT类型的字段上)
2.InnoDB中不保存表的具体行数,也就是说,执行selectcount(*)fromtable时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操飞育故吸作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETEFROMtable时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOADTABLEFROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入**后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如updatetableset**m=1wherenamelike'%wfc%'

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势.