数据库层面优化
三点:表,查询,配置
为了让数据库应用更快,需要检视以下几个问题:
1、 表结构是否是合适的?比如:列是否有正确的数据类型,每张表相对于其工作职责是否有合适的列。
2、 为了使查询效率更高,建立了正确的索引?
3、 每张表使用了合适的存储引擎,利用了每个存储引擎的特点? InnoDB(in-no-db)为事务型,MyISAM(my-z[ei]m)为非事务型。
4、 每张表使用了合适的行格式?这个取决于存储引擎的选择。压缩数据库(建表时加上ROW_FORMAT=COMPRESSED)使用更少的磁盘空间,读写数据时更少的I/O。压缩适用于各类InooDB表,只适用于只读MyISAM表。
5、 应用使用合适的锁策略?存储引擎的选择是重要的。InnoDB会内部处理锁问题。
6、 所有的缓存大小是正确的?缓存大小需要足够大,但超过物理内存时会引起换页。主要的三个参数:InnoDB buffer pool, MyISAM key cache, MySQL query cache。
硬件层面优化
系统瓶颈可通过以下因素提升:
1、 磁盘寻道。磁盘寻找一片数据的时间。现代磁盘寻道时间约为10ms,理论上1s可以有100次寻道。最新磁盘的寻道时间提升缓慢,对单个表来说很难优化。可以通过把数据分发在多个磁盘上进行优化。
2、 磁盘读写。一个磁盘的读写速度是10-20MB/s。这个是比寻道时间容易优化,可以从多个磁盘并行读。
3、 CPU周期。
4、 内存带宽。
平衡可移植性和性能
在可移植的MySQL项目中使用面向性能的的SQL扩展语法时,语句中加上MySQL特定关键字/*! */,其它SQL服务会忽略。
优化分为以下方面:
1、SQL语句优化
2、索引优化
3、表结构优化
4、InnoDB表的优化
5、MyISAM表的优化
6、MEMORY表的优化
7、分析查询执行计划
8、控制查询优化器
9、缓冲大小
10、锁操作优化
11、MySQL服务器优化
12、性能测试
13、评估线程信息