一、连接数优化
服务端:
- 设置最大连接数
- 设置连接超时时间
客户端
- 使用连接池
二、架构层次优化
减少数据库的压力
- 使用redis集群
- 基于主从复制的读写分离(mycat)
- 分库分表(垂直分库,水平分库)
三、慢查询日志
通过一些mysql慢日志查询配置,过滤慢查询并优化
四、执行计划
id 执行顺序分析:
- 如果查询结果的id不同,则先执行id大的子查询
- 如果查询结果的id一样,则从上往下执行
select_type 分析:
- select type 简单查询
- PRIMARY 主查询
- SUBQUERY 内层子查询
- DERIVED 临时查询结果集
- UNION UNION 查询
- UNION RESUL UNION 查询结果集
type 分析:
- const 只查询一条记录
- system 查询系统表
- eq_ref 主键索引或唯一索引查询出一条结果
- ref 没有用到唯一索引或者只是用到了联合索引的前缀
- range 索引范围查询
- index 全部索引查询
- all 全表扫描
- Null 不需要访问表
possible_keys 分析:
- 可能使用到的索引
key 分析:
- 最终用到的索引
ref 分析:
- 使用哪个列或者常数和索引一起从表中筛选数据
Extra 分析:
- using index 用到覆盖索引
- using where 数据过滤
- using index condition
- using filesort 不能使用索引排序
- using temporary 用到临时表
五、存储引擎优化和表结构优化
存储引擎
- 根据业务功能选择合适的存储引擎
表结构优化
- 记录表和业务表的分离
字段定义
- 定义合适的类型和长度
- 非空设置,使用空字符串
大文件存储
- 相对路径存储