mysql查询sending data占用大量时间的问题处理
问题描述:
某条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占用大量时间的问题处理的更多相关文章
- MySQL Sending data导致查询很慢的问题详细分析【转载】
转自http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的时 ...
- 实战:MySQL Sending data导致查询很慢的问题详细分析(转)
这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的 ...
- 实战:MySQL Sending data导致查询很慢的问题详细分析(转)
出处:http://blog.csdn.net/yunhua_lee/article/details/8573621 这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有 ...
- MySQL Sending data导致查询很慢的问题详细分析
这两天帮忙定位一个MySQL查询很慢的问题,定位过程综合各种方法.理论.工具,很有代表性,分享给大家作为新年礼物:) [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据的 ...
- 0223实战:MySQL Sending data导致查询很慢的问题详细分析
转自博客http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据 ...
- mysql 查询开销 sending data
1.执行一个查询,发现时间开销都在sending data,为什么?2.sending data容易误导,让人以为只是发送数据给客户端,实际上sending data包含两个过程:读取数据并处理,发送 ...
- mysql查询语句出现sending data耗时解决
在执行一个简单的sql查询,表中数据量为14万 sql语句为:SELECT id,titile,published_at from spider_36kr_record where is_analyz ...
- 1125MySQL Sending data导致查询很慢的问题详细分析
-- 问题1 tablename使用主键索引反而比idx_ref_id慢的原因EXPLAIN SELECT SQL_NO_CACHE COUNT(id) FROM dbname.tbname FORC ...
- mysql索引无效且sending data耗时巨大原因分析
一朋友最近新上线一个项目,本地测试环境跑得好好的,部署到线上却慢得像蜗牛一样.后来查询了一下发现一个sql执行了16秒,有些长的甚至80秒.本地运行都是毫秒级别的查询.下面记录一下困扰了两天的,其中一 ...
随机推荐
- HDU 6345(子串查询 暴力)
题意是每组给定一个字符串,在有限查询次数内输出所要查询区间的字典序最小的子串个数. 字典序最小的子串,就是所查询区间中字典序最小的单个字符,问题就转化成了求一段区间内字典序最小的字符个数. 开始时盲目 ...
- ubuntu常用
一.查看分区磁盘的速度命令 $ hdparm -Tt /dev/sda1 在终端打印出如下信息: /dev/sda1: Timing cached reads: MB in 2.00 seconds ...
- Unicode与UTF8
举一个例子:It's 知乎日报 你看到的unicode字符集是这样的编码表: I 0049 t 0074 ' 0027 s 0073 0020 知 77e5 乎 4e4e 日 65e5 报 62a5 ...
- CC2541设置中断输入模式
//P0.0 /* SW_6 is at P0.1 */#define HAL_KEY_SW_6_PORT P0#define HAL_KEY_SW_6_BIT BV(0)#define HAL_KE ...
- H5网页适配 iPhoneX,就是这么简单
iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可( ...
- 可由inetd启动的协议无关时间获取服务器程序
#include <time.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...
- Fetch诞生记
Fetch作用? https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch Fetch API 提供了一个 Jav ...
- 20秒教你如何写maven2的pom文件的依赖包
所有Maven 库 需要的包 及 pom.xml 中 groupId artifactId version 都可在这个网上收到. 例如:需要 通过 maven 在项目 中 添加 geronimo-k ...
- luogu 2569 股票交易 单调队列dp
注意转移方程 分1.凭空买 2.不买不卖 3.在原来基础上买 4.在原来基础上卖 四种情况 head=1,tail=0;再判断一下head<=tail也可以 #include<bits/s ...
- 【bzoj 3173】[Tjoi2013]最长上升子序列
Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数字,我们都想知道此时最长上升子序列长度是多少? Input 第一行一 ...