论MySQL数据库中两种数据引擎的差别

发表于:2011-5-10 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:蟋蟀的草坪    来源:51Testing软件测试网采编

  InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。

  基本的差别为:

  MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

  MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

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

  1、二进制层次的可移植性。

  2、NULL列索引。

  3、对变长行比ISAM表有更少的碎片。

  4、支持大文件。

  5、更好的索引压缩。

  6、更好的键吗统计分布。

  7、更好和更快的auto_increment处理。

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

  1、InnoDB不支持FULLTEXT类型的索引。

  2、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。

  3、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。

  4、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。

  5、LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

  另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

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

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号