2012年11月30日 星期五

Mysql InnoDB vs MyISAM

MyISAM :
  • Table Locking
  • FULLTEXT indexes
  • COUNT() 在MyISAM 表中會非常快 (InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的)
  • 大批的inserts 語句在MyISAM下會快一些
  • 不支持事务,宕机会破坏表
  • 使用较小的内存和磁盘空间
  • 基于表的锁,并发更新数据会出现严重性能问题


InnoDB : 
  • Row Locking (InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”)
  • Transaction + Rollback
  • 主鍵查詢則在InnoDB下會相當相當的快 (但需要小心的是如果我們的主鍵太長了也會導致性能問題)
  • updates 在InnoDB 下會更快一些
  • 如果你正在計劃使用一個超大數據量的項目,而且需要事務處理或外鍵支持,那麼你真的應該直接使用InnoDB方式。而MyISAM可能會需要幾個小時甚至幾天來幹這些事,InnoDB只需要幾分鐘
  • DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除
  • InnoDB可以利用事務日誌進行數據恢復,這會比較快 
  • 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表
  • InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。 




Reference :
淺談MySQL存儲引擎選擇 InnoDB還是MyISAM | 飛洛奇工作室
MySQL兩種表存儲結構MyISAM和InnoDB的性能比較測試-WEBASP.NET
MySQL学习笔记:InnoDB和MyISAM的差别 - bonycamel的无聊空间 - 人生忧患识字始
InnoDB vs MyISAM vs Falcon benchmarks – part 1
表锁,行锁。innodb,myisam - 探路者 - 博客频道 - CSDN.NET
mysql数据据存储引擎InnoDB和MyISAM的优势及区别_PHPChina 开源社区门户 —— PHPER的天堂,领跑PHP开源事业!
InnoDB还是MyISAM 再谈MySQL存储引擎的选择 - 51CTO.COM

沒有留言:

張貼留言