定位并优化慢查询sql
1.根据慢日志定位查询
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 //具体的执行时间
2.使用explain等工具分析sql

type代表的是对表的扫描方式,id的大小代表执行的顺序,key代表使用的键,extra代表其他额外信息。
着重关注点:
type:ALL:全表扫描,当出现ALL时需要关注。INDEX:使用索引。
extra如果出现以下两情况,可能需要调优
Using filesort (文件排序):如果一个排序操作不能通过索引来完成,那这次排序操作就叫做filesort,这跟file没有任何关系。filesort应该叫做sort,而它的实现,就是大家熟悉的快排。
Using temporary(临时表):
3.修改sql或者尽量让sql走索引

4.最左匹配原则
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的查询优化器会自动优化成索引可以识别的形式。
5.创建、删除索引
alter table table_test add index index_test1(name) ;
alter table table_name drop index index_name ;
更多推荐
所有评论(0)