一、MyISAM优缺点
优点:
1.能够快速查询唯一键
2.支持全文索引
3.选择count(*)的速度很快
4.磁盘空间占用小
缺点:
1.表级别锁定,如果写入操作的总时间占到5%以上,则表锁定会减慢应用程序的速度
2.不支持事务,没有”开始=>提交/中止“能力
3.有持久性问题,表崩溃可能需要冗长的修复操作才能使其恢复联机
二、InnoDB优缺点
优点:
1.支持事务,可以放弃和回滚查询,崩溃不会导致数据损坏
2.具有行级锁定,并发写入同一表的不同行不会被序列化
3.支持全部ACID功能的版本控制
4.支持多种联机备份策略
5.提高应用程序在高负载,大量连接下的并发能力
6.支持外键和引用完整性约束
缺点:
1.count(*)的速度慢
2.没有全文索引
3.自动递增字段必须是表中的第一个字段,当迁移的时候可能会导致问题
4.占用更多磁盘空间
5.一些简单查询的速度可能低于MyISAM,但复杂的,多表查询速度则超过MyISAM
三、存储引擎选择
选择MyISAM:
1.当应用程序执行大部分是读取操作时(大于95%)
选择InnoDB:
1.当事务性和一致性非常重要,即ACID很重要
2.有多表链接的复杂模式
3.当不间断操作非常重要时
四、优化InnoDB
16G内存数据库服务器为例:
1.innodb_file_per_table:默认情况是,InnoDB为每个数据库创建一个文件并用这个文件来管理数据库的表。设置该选项,则使InnoDB对每个表使用一个独立的数据存储文件。如果想在现有数据库上更改此设置,应该备份数据库,然后删除它,再更改选项,然后重新启动服务器,最后从备份中重新导入到该数据库
(数据库文件存在my.cnf中datadir指定的路径中,一般后缀是.frm)
2.innodb_buffer_pool_size:如果只使用innoDB表,70%内存即可,若混合使用innoDB和MyISAM,则减少一点,给MyISAM留些空间
3.innodb_log_buffer_size=4M即可,若有很多文本字段或blob字段或记录很大,则可以提高一些
4.innodb_log_file_size=256M,推荐值
5.innodb_flush_log_at_trx_commit=2,该项控制将日志文件刷新到磁盘的频率。若容忍崩溃时丢失记录,可以设为2来减少磁盘写入的频率,减少IO
(参考自《高性能php应用开发》人民邮电出版社)