zoukankan      html  css  js  c++  java
  • 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秒左右

  • 相关阅读:
    Centos 设置默认路由得优先级
    openstack-NUMA排错记录
    openstack -新建project
    As3 常用日期工具
    As3 计算两个日期之间的天数差
    解决Asp.net Mvc返回JsonResult中DateTime类型数据格式的问题
    网盘+SVN
    SQL 并发-转
    工作目录
    Cookie
  • 原文地址:https://www.cnblogs.com/reblue520/p/7426694.html
Copyright © 2011-2022 走看看