当前位置: 首页 > 图文教程 > 网络编程 > PHP > mysql 中InnoDB和MyISAM的区别分析小结

PHP
支持php4、php5的mysql数据库操作类
apache rewrite_module模块使用教程
java EJB 加密与解密原理的一个例子
asp和php下textarea提交大量数据发生丢失的解决方法
用php实现批量查询清除一句话后门的代码
Dedecms常用函数解析
PHP5 面向对象程序设计
PHP4与PHP5的时间格式问题
请php正则走开
php str_replace的替换漏洞
php 常用字符串函数总结
php实现mysql数据库备份类
由php if 想到的些问题
附件名前加网站名
深思 PHP 数组遍历的差异(array_diff 的实现)
PHP 实例化类的一点摘记
php入门小知识
php木马攻击防御之道
php不用正则采集速度探究总结
非常不错的MySQL优化的8条经验

PHP 中的 mysql 中InnoDB和MyISAM的区别分析小结


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 79 ::
收藏到网摘: n/a

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。 MyIASM是IASM表的新版本,有如下扩展:
二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的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的性能优势。