Advertisement

定位并优化慢查询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:使用索引。

性能排序: system> const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

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 ;

全部评论 (0)

还没有任何评论哟~