问题描述:
某条sql语句在测试环境执行只需要1秒不到,到了生产环境执行需要8秒以上

在phpmyadmin里面执行性能分析,发现sending data占用了差不多90%以上的时间

查询一下“Sending data”状态的含义,原来这个状态的名称很具有误导性,所谓的“Sending data”并不是单纯的发送数据,而是包括“收集 + 发送 数据”。
这里的关键是为什么要收集数据,原因在于:mysql使用“索引”完成查询结束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“数据行”上将需要返回的数据读取出来返回个客户端。

猜测可能是索引没有添加正确,于是采用
explain分析方法,在查询语句前添加expain,如下可以在phpadmin里面执行,也可以在navicat中执行:

explain SELECT
a.media_id,
a.user_id,
a.media_type,
a.title,
a.media_url,
a.description,
a.cover_url,
a.like_count,
a.play_count,
a.reply_count,
a.relay_count,
a.share_count,
a.length,
a.width,
a.length_time,
a.STATUS,
a.verification,
a.encapsulate_status,
a.create_time,
a.update_time,
a.audit_time,
CASE WHEN c.id IS NOT NULL THEN 1 ELSE 0 END niuren,
c.coefficient,
CASE WHEN d.id IS NOT NULL THEN 1 ELSE 0 END remen,
d.coefficient coefficientReMen,
b.nickname,
p.official,
p.theme_id,
p.theme_name,
u.size
FROM
tbl_media_info a
LEFT JOIN tbl_user_info b ON a.user_id=b.user_id
LEFT JOIN tbl_ranking_config c ON c.media_id=a.media_id AND c.type=3
LEFT JOIN tbl_ranking_config d ON d.media_id=a.media_id AND d.type=2
LEFT JOIN tbl_media_theme_config t ON a.media_id = t.media_id
LEFT JOIN tbl_theme_info p ON t.theme_id = p.theme_id
LEFT JOIN tbl_upload_status u ON u.url = a.media_url

GROUP BY a.media_id

order by a.create_time desc limit 0,20

通过explain查询分析,可以看到结果中possible_keys为空,说明没有用到索引
LEFT JOIN tbl_media_info t5 ON t1.user_id = t5.user_id,而这个关联查询用到了user_id,需要在这个字段上添加索引

添加索引,问题解决,查询只需要0.5秒左右

mysql查询sending data占用大量时间的问题处理的更多相关文章

  1. MySQL Sending data导致查询很慢的问题详细分析【转载】

    转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...

  2. 实战:MySQL Sending data导致查询很慢的问题详细分析(转)

    这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的 ...

  3. 实战:MySQL Sending data导致查询很慢的问题详细分析(转)

    出处:http://blog.csdn.net/yunhua_lee/article/details/8573621 这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有 ...

  4. MySQL Sending data导致查询很慢的问题详细分析

    这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的 ...

  5. 0223实战:MySQL Sending data导致查询很慢的问题详细分析

    转自博客http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据 ...

  6. mysql 查询开销 sending data

    1.执行一个查询,发现时间开销都在sending data,为什么?2.sending data容易误导,让人以为只是发送数据给客户端,实际上sending data包含两个过程:读取数据并处理,发送 ...

  7. mysql查询语句出现sending data耗时解决

    在执行一个简单的sql查询,表中数据量为14万 sql语句为:SELECT id,titile,published_at from spider_36kr_record where is_analyz ...

  8. 1125MySQL Sending data导致查询很慢的问题详细分析

    -- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...

  9. mysql索引无效且sending data耗时巨大原因分析

    一朋友最近新上线一个项目,本地测试环境跑得好好的,部署到线上却慢得像蜗牛一样.后来查询了一下发现一个sql执行了16秒,有些长的甚至80秒.本地运行都是毫秒级别的查询.下面记录一下困扰了两天的,其中一 ...

随机推荐

  1. 阅读:重新介绍 JavaScript(JS教程)

    这篇文章是记录自己阅读重新介绍 JavaScript(JS 教程)的记录和个人体会 在线调试代码工具:https://codepen.io/pen 引言 分歧根源:名字Javascript和Java有 ...

  2. 原生JavaScript运动功能系列(二):缓冲运动

    匀速运动实现回顾 缓冲运动剖析 示例实现 方法提取 匀速运动实现回顾及缓冲运动剖析: 在这个系列的上一篇博客中原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现就运动的核心功能组成 ...

  3. HDU - 4578 Transformation(线段树区间修改)

    https://cn.vjudge.net/problem/HDU-4578 题意 4种操作,区间加,区间乘,区间变为一个数,求区间的和.平方和以及立方和. 分析 明显线段树,不过很麻烦..看kuan ...

  4. Part-Seven

    1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.

  5. 牛客网数据库SQL实战(此处只有答案,没有表内容)

    1.查找最晚入职员工的所有信息   select * from employees order by hire_date desc limit 1; --limit n表示输出前n条数据,limit ...

  6. Iterator迭代器

    java.util.Iterator 迭代器iterator,是一个接口,不能够直接使用,需要使用Iterator接口的实现类对象,而获取实现类的的对象的方式为: Collection接口中有一个方法 ...

  7. 解析/proc/net/dev

    https://stackoverflow.com/questions/1052589/how-can-i-parse-the-output-of-proc-net-dev-into-keyvalue ...

  8. 函数的作用域、global与nonlocal

    global 表示不再使用局部局部作用域中的内容,而是改用全局作用域中的变量 a = 100 def func(): global a # 表示不再局部创建这个变量,而是直接使用这个全局的a a = ...

  9. 为jqweui增加selectcallback方法

    jqweui select控件不支持select方法,可以自己添加代码,版本0.6.0. 1.增加selectcallback 2.change中增加如下代码 3.在select初始化时添加 sele ...

  10. [译]Nuget.Server

    原文 NuGet.Server是一个包,可用于使一个ASP.NET应用host一个package feed . 使用VS创建一个新的空WEB应用,添加Nuget.Server包. 配置应用的Packa ...