1.SHOW FULL PROCESSLIST
解释:
id :连接id,可以使用kill+连接id的方式关闭连接
user:当前用户
host:当前连接客户端
db:连接的数据库
command:显示当前连接的当前执行的状态,sleep、query、connect
time:持续时间
state:sql语句的执行状态,copying to tmp table、sorting result、sending data等
info:sql语句,持续时间过长,则需要优化
2.慢日志查询
记录响应时间超过设置阈值(long_query_time)的SQL语句,默认未开启;
slow_query_log:是否开启 on/off
long_query_time:设置阈值
slow_query_log_file:慢查询日志文件存储路径
log_queries_not_using_indexes:记录没有使用索引的语句,on/off
log_output:日志存储方式,TABLE(通过 select * from mysql.slow_log 查询) 和 FILE
show variables like ‘%_query%’ 查询
3.explain分析SQL语句
id:执行顺序,id相同,自上而下执行,id越大,执行优先级越高
select_type:查询类型
SIMPLE:简单查询
PRIMARY:子查询中最外层查询
UNION:UNION中的第二个或后面的SELECT语句
DEPENDENT: UNION(UNION中的第二个或后面的SELECT语句,取决于外面的查询)
UNION RESULT:(UNION的结果,union语句中第二个select开始后面所有select)
SUBQUERY:(子查询中的第一个SELECT,结果不依赖于外部查询)
DEPENDENT SUBQUERY :(子查询中的第一个SELECT,依赖于外部查询)
DERIVED:(派生表的SELECT, FROM子句的子查询)
UNCACHEABLE SUBQUERY:(一个子查询的结果不能被缓存,必须重新评估外链接的第一行)
table:表名或负责查询的临时表名
type:检索方式
system:表只有一行记录
const:通过索引查找并且一次性找到
eq_ref:唯一性索引扫描
ref:非唯一行索引扫描
range:按范围查找
index:遍历索引树
all:全表扫描
possible_keys:可能用到的索引
Key:实际使用的索引
key_len:索引长度,越短越好
ref:列与索引的比较,连接匹配条件,哪些列或常量被用于查找索引列上的值
rows:查找的结果记录条数
Extra:SQL查询的详细信息
Using where:表示使用where条件过滤
Using temporary:使用了临时表暂存结果
Using filesort:说明mysql对数据使用一个外部索引排序。未按照表内的索引顺序进行读取。
Using index:表示select语句中使用了覆盖索引,直接从索引中取值
Using join buffer:使用了连接缓存
Using index condition:表示查询的列有非索引的列