Mysql慢查询定位及解决常用思路之一

一、根据慢日志定位慢查询sql

1、查询慢日志的数量

      执行语句:show status like "%slow_queries%",(只记录本次会话的慢mysql语句条数);

2、执行mysql语句:show variables like "%quer%"

      查询出的信息中主要关注字段slow_query_log(慢日志OFF关闭,ON开启)、long_query_time(sql语句超过规定的时间记录 入慢日志)、slow_query_log_file(慢日志的记录信息文件所在目录);

3、修改(一:2)步骤中关注的字段的设置

      设置打开慢日志:set global slow_query_log =  on,(设置后需要重新连接mysql客户端);

      设置规定的时间:set global long_query_time = 2,(2秒,超过两秒查询就会记录到slow_query_log_file目录);

      可以在mysql配置文件去配置这样可以永久保存;

二、使用explain工具分析sql语句(explain外还有其他工具)

      假设分析语句:select name from students_table order by name desc;

      explain分析:explain select name from students_table order by name desc;

      分析出来的信息这里只关注id(复合查询中id越大越先执行)、type(有多个值,自行了解,index和all表示是全表查询效率    低)、extra(值为 Using filesort 或者 Using temporary 意为mysql根本不能使用索引,从而效率受到影响。Using filesort:表示mysql会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容,可能在内存或磁盘上进行排序。mysql中无法利用索引完成的排序操作称为“文件排序”;Using temporary:表示mysql在对查询结果排序时使用临时表。常见于排序order by 和分组查询group by。)、key(走索引的字段);

      语句执行的时间以慢日志的记录时间为准。

三、修改sql语句或者尽量让sql语句走索引

      给name字段加索引:alter table students_table add index idx_name(name),或者改为有索引的字段查询。

 

扩展:

explain select count(id) from  students_table force index(primary);

语句后面的 force index(primary)表示强制走主键索引,primay为有索引字段名;

走不同的索引效率各有不同,需要具体情况具体分析测试具体择优使用。

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值