1、数据库服务器的优化步骤
S观察(Show status)和A行动(Action)mysql
- 是否存在周期性的波动,加缓存,或者更改缓存失效策略
- 开启慢查询,定位执行慢的 SQL 语句
- 用 EXPLAIN 查看对应 SQL 语句的执行计划,或者使用 SHOW PROFILE 查看 SQL 中每个步骤的时间成本
- SQL 等待时间长,能够调优服务器的参数,好比适当增长数据库缓冲池
- SQL 执行时间长,索引设计的问题、查询关联的数据表过多、数据表的字段设计问题致使了这一现象
- 增长服务器,采用读写分离的架构,或者考虑对数据库分库分表,好比垂直分库、垂直分表和水平分表
2、使用慢查询定位执行慢的 SQL
show variables like '%slow_query_log'; -- 查看慢查询日志设置 set global slow_query_log='ON'; -- 开启慢查询日志 show variables like '%long_query_time%'; -- 查看慢查询的时间阈值设置 set global long_query_time = 3; -- 设置慢查询时间阈值(秒)
使用 MySQL 自带的 mysqldumpslow 工具统计慢查询日志正则表达式
- -s:采用 order 排序的方式,分别是 c(访问次数)、t(查询时间)、l(锁定时间)、r(返回记录)、ac(平均查询次数)、al(平均锁定时间)、ar(平均返回记录数)和 at(平均查询时间,默认排序)
- -t:返回前 N 条数据 。
- -g:后面能够是正则表达式,对大小写不敏感
3、使用 EXPLAIN 查看执行计划
EXPLAIN SELECT 字段 FROM 表 WHERE 条件
- all 是最坏的状况,由于采用了全表扫描的方式
- index 和 all 差很少,只不过 index 对索引表进行全扫描,这样作的好处是再也不须要对数据进行排序,可是开销依然很大
- 若是咱们在 Extral 列中看到 Using index,说明采用了索引覆盖,也就是索引能够覆盖所需的 SELECT 字段,就不须要进行回表,这样就减小了数据查找的开销
4、使用 SHOW PROFILE 查看 SQL 的具体执行成本
show variables like 'profiling'; -- 查看SQL 的执行成本设置 set profiling = 'ON'; -- 开启SQL 的执行成本设置 show profiles; -- 当前会话都有哪些 profiles show profile; -- 查看上一个查询的开销