一、MyISAM 引擎

1.1 MyISAM引擎的特点

1、不支持事务2、表级锁定,更新时锁定整个表3、读写互相阻塞4、只会缓存索引,通过key_buffer_size 缓存索引5、读取速度快,占用资源相对少6、不支持外键约束,但支持全文索引7、MyISAM 引擎是mysql 5.5 前默认的存储引擎

1.2 MyISAM适合的生产业务场景

1、不需要事务支持的业务;2、一般为读数据较多的应用;读写都频繁场景不适合,读多或写多都适合3、并发访问相对较低的业务(纯读纯写高并发也可以)(锁定机制问题)。4、数据修改相对较少的业务(阻塞问题)5、以读为主的业务,6、对数据一致性要求不高的业务7、硬件资源比较差的机器可以使用MyISAM,所谓8、中小型网站的部分业务会用。

1.3 MyISAM引擎调优的方式

1、设置合适的索引(缓存机制)2、调整读写优先级,根据实际需求确保重要操作更优先执行3、启用延时插入,改善大批写入性能(降低写入频率,竟可能多条数据一次性写入)4、尽量顺序操作让insert 数据都写入到尾部,减少阻塞5、分解大的时间长的操作,降低单个操作的阻塞时间6、降低并发数(减少mysql访问),某些高并发场景进行排队队列机制7、对于相对静态的数据库数据,充分利用query cache 或memcached 缓存服务可以极大提高访问效率8、myisam 的count 只有在全表扫描时特别高效,带有其他条件的count 都需要进行实际的数据访问9、可以把主从同步的主库使用innodb,从库使用myisam 引擎

二、InnoDB

2.1 InnoDB的特点:

1、支持事务2、行级锁定3、读写阻塞与事务隔离级别相关4、具有非常高效的缓存特性5、整个表和主键以Cluster 方式存储,组成一颗平衡树6、所有secondary index 都会保存主键信息7、支持分区,表空间,类似oracle 数据库8、支持外键约束,支持全文索引9、和myisam 比,innodb 对硬件资源要求较高

2.2 生产业务场景

1、需要事务支持的业务2、行级锁对高并发有很好的适应能力,但需要确保查询是通过索引完成3、数据读写及更新都较为频繁的场景4、数据一致性要求较高的业务5、硬件设备内存较大6、相比myisam引擎,innodb更消耗资源,没有myisam 响应速度快

2.3 InnoDB 调优精要

1、主键尽可能小,避免给Secondary index 带来过大的空间负担2、避免全表扫描,因为会使用表锁3、尽可能缓存所有索引和数据,提高响应速度,减少磁盘IO 消耗4、在大批量小插入的时候,尽量自己控制事物而不要使用autocommit 自动提交,有开关可以控制提交方式5、合理设置innodb_flush_log_at_trx_commit 参数值,不要过度追求安全性如果设置为0,log buffer 每秒就会被刷写日志文件到磁盘,提交事物的时候不做任何操作6、避免主键更新,因为这会带来大量的数据移动