1.show VARIABLES like '%QUERY%';
查看系统慢日志等其他系统功能信息
参数解析 long_query_time:超时记录时间
slow_query_log_file:慢日志位置
2.show status like '%slow_queries%';
查看慢日志中包含的慢查询sql语句条数
3.set global slow_query_log = on;
将状态设置为 on
4.set GLOBAL long_query_time=1;
修改超时记录时间为1s
5.测试
执行:SELECT SLEEP(10);
执行:show status like '%slow_queries%';
之后可以到对应文件查看详细的语句的执行信息
6.查看详细信息
Query_time: 10.002167 //具体的执行时间type代表的是对表的扫描方式,id的大小代表执行的顺序,key代表使用的键,extra代表其他额外信息。
着重关注点:
type:ALL:全表扫描,当出现ALL时需要关注。INDEX:使用索引。
性能排序:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
extra如果出现以下两情况,可能需要调优
Using filesort (文件排序):如果一个排序操作不能通过索引来完成,那这次排序操作就叫做filesort,这跟file没有任何关系。filesort应该叫做sort,而它的实现,就是大家熟悉的快排。
Using temporary(临时表):
1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直至遇到范围查询(> < between like)就停止匹配,比如 a=3 abd b=4 and c>5 and d=6 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则可以用到,a,b,d的顺序可以任意调整
2.=和in可以乱序,比如a=1 and b=2 and c=3 建立(a,b,c)索引可以任意顺序,mysqk的查询优化器会自动优化成索引可以识别的形式。
alter table table_test add index index_test1(name) ;
alter table table_name drop index index_name ;