mysql慢查询
当系统遇到慢查询sql性能瓶颈,如何去定位以及优化?
- 开启慢查询
- 查看慢查询日志
- 定位分析慢查询sql(expalin)
- sql优化(索引,分页,表连接,分解复杂sql等等)
开启慢查询
查询慢查询是否打开 show variables like '%slow_query_log'
查看慢查询日志位置
通过命令查询慢查询日志路径:SHOW VARIABLES LIKE '%query%';
定位分析慢查询sql
explain sql(执行计划查看)
expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra,下面对这些字段出现的可能进行解释:
select_type
- SIMPLE(简单SELECT,不使用UNION或子查询等)
- PRIMARY(查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY)
- UNION(UNION中的第二个或后面的SELECT语句)
- DEPENDENT UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
- UNION RESULT(UNION的结果)
- SUBQUERY(子查询中的第一个SELECT)
- DEPENDENT SUBQUERY(子查询中的第一个SELECT,取决于外面的查询)
- DERIVED(派生表的SELECT, FROM子句的子查询)
- UNCACHEABLE SUBQUER