MySQL性能优化
硬件升级
- CPU
- 内存
- 硬盘
- 网络
系统配置
- 扩大innodb_buffer_pool_size:尽可能地扩大内存中的数据量将数据保存在内存中,从内存中读取数据,可以提升MySQL性能。如修改my.cnf,innodb_buffer_pool_size=750M
- 数据预热:通过脚本将磁盘上的全部数据缓存到内存中
- 降低磁盘写入次数
- 增大redolog,减少落盘次数,innodb_log_file_size
- 通用查询日志、慢查询日志可以不开,binlog开
- 写redolog策略,innodb_flush_log_at_trx_commit设置为0或2
数据库表设计性能优化
- 设计中间表:一般针对统计分析功能,或者实时性要求不高的需求(OLPT,OLAP)
- 设计冗余字段:为减少关联查询,创建合理的冗余字段
- 拆表
- 对于字段太少的表,考虑拆表
- 对于表中经常不被使用的字段或者存储数据比较多的字段(大文本)
- 主键优化:每张表建议都要有一个主键(主键索引),而且主键类型最好是INT类型,建议自增主键
- 字段的设计:将表中字段的宽度设计得尽可能小,能用数值型尽量用数值型
SQL语句性能优化
SQL语句做性能优化,一般步骤如下:
- 开启慢查询日志,定位运行慢得SQL语句
- 利用explain执行计划,查看SQL执行情况
- 关注索引使用情况:type
- 关注Rows,行扫描
- 关注Extra:没有信息最好
- 加索引后,查看索引使用情况,index只是覆盖索引,并不算很好的使用索引
- 如果有关联尽量将索引用到eq_ref或ref级别
- 复杂SQL可以做成视图,视图在MySQL内部有优化,而且开发也比较友好
- 对于复杂的SQL要逐一分析,找到比较费时的SQL语句片段进行优化