栏目导航: 首页 > 数据库类 > MySQL数据库 > 内容

mysiam 和 innodb MySQL 两大存储引擎 的对比

www.hx99.net    时间: 2015-12-27    阅读: 次     整理: 华西安全网

 

mysql有两大存储引擎,分别是MyISAM 和 Innodb,两者并没有绝对的好坏,只有根据自己的业务情况,选择更合适的存储引擎。
一、两者的区别

先用表格列出它们间的区别

  MyISAM Innodb
存储结构 每张表被存放在三个文件中:frm(结构定义), MYD(数据), MYI(索引) 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB
存储空间 MyISAM可被压缩,存储空间较小 InnoDB的表需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引
可移植性、备份及恢复 由于MyISAM的数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作 免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了
事务安全 不支持 支持。具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表
AUTO_INCREMENT MyISAM表可以和其他字段一起建立联合索引 InnoDB中必须包含只有该字段的索引
SELECT MyISAM更优  
INSERT   InnoDB更优
DELETE   InnoDB更优
COUNT without WHERE MyISAM更优。因为MyISAM保存了表的具体行数 InnoDB没有保存表的具体行数,需要逐行扫描统计,就很慢了
COUNT with WHERE 一样 一样(这种情况也会锁表)
只支持表锁 支持表锁、行锁。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的
外键 不支持 支持
FULLTEXT全文索引 支持 不支持 可以通过使用Sphinx从InnoDB中获得全文索引,会慢一点

二、如何选择

1. 是否有特殊需求,比如事务、外键、全文索引?

  • innodb支持事务、外键
  • mysiam 支持全文索引

2. 操作类型比例

  • 大量的是update,用innodb
  • 大量的是select操作、insert的操作,用mysiam(insert语句可以通过优化concurrent_insert=2来解决,再定期的做碎片优化)

3. 数据量大小

  • 大尺寸的表,建议用innodb

4. 其他

如果大量用到count(*),建议用mysiam,因为会保存表的行数.

来源:http://ifxoxo.com/mysiam_innodb.html

本文来源:华西安全网[http://www.hx99.net]
发表评论】【告诉QQ好友】【错误报告】【加入收藏】【关闭