欢迎投稿

今日深度:

MySQL5.6 如何优化慢查询的SQL语句,mysql5.6sql

MySQL5.6 如何优化慢查询的SQL语句,mysql5.6sql


上篇:MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍

在实际的日志分析中,通常慢日志的log数量不少,同时相同的查询被记录的条数也会很多,这里就需要如何从慢日志查询中找到最有问题,最需要优化的日志。在这方面,有很多分析工具,最基本的分析工具就是MySQL自带的mysqldumpslow,mysqldumpslow(Perl脚本)的输出示例:

[root@cloudlu bin]# ./mysqldumpslow -s t -t 1 /usr/local/mysql/data/cloudlu-slow.log

Reading mysql slow query log from /usr/local/mysql/data/cloudlu-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=3.0 (3), root[root]@localhost
  select * from t
一看就非常清楚,它的输出主要 统计不同慢sql的出现次数(Count 1),执行最长时间(Time 0.00s),累计总耗费时间(Time 0s),等待锁的时间(Lock 0.00s),等待锁的总时间(Lock 0s),发送给客户端的行总数(Rows 3.0),扫描的行总数(Rows 3),用户(root)以及sql语句本身。它最常用的参数包括:

-s 排序选项:c 查询次数 r 返回记录行数 t 查询时间 
-t n:显示top n条查询


对于一般的分析已经差不多了,不过对于百分比等等数据mysqldumpslow就不够完善了。所以世界上多了很多各种MySQL慢日志分析工具,比较优秀的有mysqlsla(Perl脚本)和pt-query-digest(Perl脚本),可以提供Count, sql的执行次数及占总的slow log数量的百分比,Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比,95% of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间,Lock Time, 等待锁的时间,95% of Lock , 95%的慢sql等待锁时间,Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量,Rows examined, 扫描的行数量,还可以生成表报,存储分析结果。这里就不一一介绍了。


通过这些慢日志分析软件定位到了慢查询语句就已经完成了SQL优化的一大半。接下来通过在MySQL中执行explain或者desc命令查看慢查询语句,可以看出为什么SQL查询慢。

mysql> explain select * from test.t \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 2
        Extra: NULL
1 row in set (0.00 sec)

它的输出格式细节可以关注MySQL explain format,在输出中最要注意的是:

1. type:ALL是效率最差,最要注意的

2. key:是否有使用Key,key长度如何

3. Extra:最好不要出现filesort以及temporary,最主要是要关注在orderby和groupby。


Note: SQL优化是个很复杂的过程,有可能出现拆东墙补西墙的情况:比如给数据库表加入了索引之后,确实查询快了,可是存储空间加多了,插入删除操作耗时也增加了,如果在一个写多读少的系统中,执行这种优化可能会起到反效果。所以优化完之后千万不能大意,要持续监控系统,防止出现引入新瓶颈的情况。


MYSQL慢查询里有一个SQL语句超慢,解决思路

要全查吗? 最好加点限制吧,5万条都查出来你也看不了
select * from `a1214213340`.`pp_vod` limit 100

如果可以的话,最好不用 * 需要哪些字段查哪些

select title,content,id,datetime from `a1214213340`.`pp_vod` limit 100
 

怎优化mysql的查询速度 我有一张表 article 里面出着约4万条记录,sql查询很慢,不知该怎优化?

这条SQL语句很简单,就一个条件单纯从语句上已经无法优化了,但可以使用其它的方法
比如,你的 guid 是一个固定长度的字符串吗?如果是的话,可以使用 char 类型,另外,如果 guid 字段不是主键的话,并且经常被检索的话,可以为该字段创建索引,有了索引以后,相信查询速度至少可以提高10倍以上
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3808.html NewsArticle MySQL5.6 如何优化慢查询的SQL语句,mysql5.6sql 上篇: MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍 在实际的日志分析中,通常慢日志的log数量不少,同时相同的查询被记录的条数也会很...
评论暂时关闭