开启记录所有的SQL
# 查看
show variables like 'general%';
# 设置开启
set GLOBAL general_log='ON';
# 设置记录日志路径 , 不同系统,路径有所不同.
set global general_log_file='D:\\logs\\mysql-select.log'; # window
set global general_log_file='/home/logs/mysql-select.log';# linux
# 可以选择记录在表里
SET GLOBAL log_output = 'TABLE';
# 可以选择记录文件里(默认)
SET GLOBAL log_output = 'FILE';
以上方法, MYSQL重启失效.
修改my.cnf文件,永久生效.
general_log = 1
general_log_file = /var/log/mysql/general_sql.log
开启慢查询
# 查看
show variables like '%slow_query_log%';
# 设置开启慢查询
set global slow_query_log=1;
# 设置多长算慢SQL, 单位s
set long_query_time = 1
# 设置慢SQL记录路径
set global slow_query_log_file ='D:\\logs\\mysql_slow.log'; # window
set global slow_query_log_file ='/home/logs/mysql_slow.log';# linux
以上方法MYSQL重启失效.
修改my.cnf文件,永久生效
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /home/logs/mysql_slow.log
Explain 分析SQL
explain select * from orders

重要的几个字段
- select_type 查询类型
- table 查询哪个表
- type 访问类型(重要)
- possible_keys 可能用到的索引
- key 实际用到的索引
- ref
- rows 扫描行的数量
- Extra 执行情况的说明和描述
select_type 表示查询select类型
类型 | 说明 | |
---|---|---|
SIMPLE | 简单查询,未使用到联表或子查询 | |
PRIMARY | 主查询,即外层的查询 | |
UNION | UNION中的第二个或者后面的查询语句 | |
SUBQUERY | 子查询中的第一个 | 子查询中的第一个 |
type 访问类型, 从上到下,性能由差到最好.
类型 | 说明 |
---|---|
ALL | 全表扫描 |
index | 索引全扫描 |
range | 索引范围扫描 |
ref | 非唯一索引扫描 |
eq_ref | 唯一索引扫描 |
const,system | 单表最多有一个匹配行 |
NULL | 不用扫描表或索引 |
[toc]
Extra 执行情况的说明和描述
类型 | 说明 |
---|---|
Using Index | 表示索引覆盖,不会回表查询 |
Using Where | 表示进行了回表查询 |
Using Index Condition | 表示进行了ICP优化 |
Using Flesort | 表示MySQL需额外排序操作, 不能通过索引顺序达到排序效果 |
什么是ICP,也称下推
Index Condition Pushdown(ICP)
MYSQL5.6之前, 多个条件查询时,会回表查询
MYSQL5.6之后, 不需要再回表查询了,直接分析条件是否满足.
网友评论