定位并优化慢查询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所处的位置反映了执行顺序;该字段用于标识所使用的键;这部分字段通常包含其他额外的信息。
着重关注点:
type:ALL:全表扫描,当出现ALL时需要关注。INDEX:使用索引。
extra如果出现以下两情况,可能需要调优
该文件排序算法(FileSort):如果一个排序操作无法基于索引完成,则该排序操作被称为FileSort。与文件(File)本身无关。为了便于理解和区分,默认将其命名为Sort算法。其实现基于快速排序(Quick Sort)算法。
Using temporary(临时表):
3.修改sql或者尽量让sql走索引

4.最左匹配原则
左侧前缀匹配机制作为MySQL优化的重要基础,在执行过程中会持续向右扫描数据行直至遇到条件如大于号(>)、小于号(<)、介于之间(between)、像模式(like)等关键字时才会停止匹配过程。例如,在执行SELECT * FROM table WHERE a=3 AND b=4 AND c>5 AND d=6语句时:
- 若构建包含字段a、b、c、d的有序索引表,则其中字段d无需依赖索引参与计算。
- 而若字段顺序调整为a、b、d、c,则其中字段d将依赖该索引表用于计算。
- 由此可见,默认情况下字段排列顺序并非固定限制。
在mysqk中支持将等于操作符与in操作符进行混合排列组合的方式进行查询设计。例如,在构造(a,b,c)索引时无需考虑字段间的固定顺序关系
5.创建、删除索引
alter table table_test add index index_test1(name) ;
alter table table_name drop index index_name ;
