mysql-哪位大神告诉我这个sql怎么优化,有执行计划图

问题描述

哪位大神告诉我这个sql怎么优化,有执行计划图
EXPLAIN SELECT *,

           CAST(prorder.deliveryfeedback as char) as deliveryfeedback,
           CAST(prorder.pocreatedate as char) as pocreatedate

    FROM (
    SELECT request.fnumber,
           request.purtaskid,
           rd.request_detail_id,
           rd.request_id,
           item.skuid,
           item.sku,
           item.purdesc,
           item.purspec,
           CONCAT(request.purtaskid,'',rd.skuid) as combineid,
           rd.stopkg,
           rd.purpkg,
           rd.reqpurqty,
           rd.requestqty,
           rd.poqty,
           rd.piqty,
           rd.sponroadqty,
           rd.revshipqty,
           rd.podate,
           rd.pidate,
           rd.shipdate,
           rd.revshipdate,
           rd.skulabel,
           rd.reqdeliverydate,
           rd.purpkgid,
           request.fstatus,
           request.urgency,
           date_format(request.checktime, '%Y-%m-%d %T') as checktime,
           sys_user.firstname,
           CONCAT(sys_user.firstname,'',sys_user.lastname) as username,
           Sysuser.email,
           date_format(request.create_date, '%Y-%m-%d') createdate

         FROM rs_request_detail rd
         inner join rs_request request on request.request_id = rd.request_id
         left join bs_item item on rd.skuid = item.skuid
         LEFT JOIN sys_user Sysuser ON Sysuser.userid = request.user_id
         left join sys_user sys_user on item.pmid = sys_user.userid

        WHERE (1 = 1) 

         and item.isvirtual=0
         and request.purtaskid>0
         and request.fstatus in(22,23,30)
         ORDER BY rd.request_id  DESC
            LIMIT 1,5000
        ) T

        LEFT JOIN (
            SELECT
                GROUP_CONCAT(distinct pod.delivery_feedback) deliveryfeedback,
                MAX(pod.delivery_feedback) deliveryfeedbackmax ,
                po.createdate AS pocreatedate,
                po.purtaskid,
                pod.skuid,
                pod.delivery_feedback_remark,
                'CNY' as curno,
                GROUP_CONCAT(distinct po.orderno) orderno,
                FORMAT(SUM((SELECT rate FROM exchange_rate WHERE money_type = po.curno )*pod.price/
                (SELECT rate FROM exchange_rate WHERE money_type = 'CNY')*pod.purqty)/
                SUM(pod.purqty),2)
                as amount
            FROM pr_order po
            INNER JOIN pr_order_detail pod ON po.prorderid = pod.prorderid and po.purtaskid > 0
            where po.purtaskid > 0
            GROUP BY po.purtaskid,pod.skuid ORDER BY NULL
        ) prorder on prorder.purtaskid=T.purtaskid and prorder.skuid=T.skuid 

        LEFT join (
            select
                A.purtaskid,
                A.skuid,
                SUM(A.quantity)  detectquantity,
                SUM(A.batchCheckNum)  batchCheckNum,
                date_format(A.transdate,'%Y-%m-%d %H:%i:%s') transdate,
                date_format(A.detectDate,'%Y-%m-%d %H:%i:%s') detectDate
             from (
                select
                prorder.prorderid,
                detect.detect_id,
                prorder.purtaskid,
                detect.skuid,
                detect.quantity,
                SUM(detectdetail.batchCheckNum) as batchCheckNum,
                detect.transdate,
                IFNULL(detectdetail.detectDate,DATE('9999-01-01')) as detectDate
            from pr_order prorder
            INNER join scm_detect detect on prorder.prorderid = detect.prorderid and prorder.purtaskid>0
            LEFT join scm_detect_detail detectdetail on detectdetail.detect_id =detect.detect_id
            GROUP BY prorder.purtaskid,detect.skuid,detect.detect_id
            ORDER BY NULL
        ) A
          GROUP BY A.purtaskid,A.skuid ORDER BY NULL
        ) detectd on detectd.purtaskid=T.purtaskid and detectd.skuid=T.skuid
          ORDER BY T.request_id DESC

解决方案

这个太复杂了,不建议写这么负责的语句。
建议拆成多条语句,能不连接就不连接。通过程序解决。
否则将来维护,非常困难,并且可扩展性不强。

解决方案二:

解决方案三:

隐式使用了临时表空间 排序造成

时间: 2024-09-25 17:08:13

mysql-哪位大神告诉我这个sql怎么优化,有执行计划图的相关文章

mysql-用MySQL运行了一个maven ssm程序框架到web上,求位大神告诉我这是什么错误?谢谢!

问题描述 用MySQL运行了一个maven ssm程序框架到web上,求位大神告诉我这是什么错误?谢谢! [com.alibaba.druid.pool.DruidDataSource]create connection error java.sql.SQLException: Access denied for user 'sypro'@'localhost' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException

求解答-求求哪位大神告诉我这到底怎么了?怎么改,跪求详解

问题描述 求求哪位大神告诉我这到底怎么了?怎么改,跪求详解 相关代码:(缺什么我可以补充) **<!-- 车牌信息 --> /Module/Chepaixinxi/List.jsp/Module/Chepaixinxi/List.jsp /Module/Chepaixinxi/Edit.jsp/Module/Chepaixinxi/Edit.jsp /Module/Chepaixinxi/Edit.jsp/Module/Chepaixinxi/List.action?pageLink=${pa

哪位大神告诉我现在比较好用的图形界面开发软件是什么?

问题描述 RT!! 解决方案 解决方案二:Swing:NetbeansSWT/JFace:Eclispe+WindowBuilderPro

java-jena现在怎么没有com.hp.hpl.jena.db包,哪位大神给一个创建mysql的例子,谢谢

问题描述 jena现在怎么没有com.hp.hpl.jena.db包,哪位大神给一个创建mysql的例子,谢谢 jena现在怎么没有com.hp.hpl.jena.db包,哪位大神给一个创建mysql的例子,谢谢

mysql-哪位大神知道搜云的30G数据库怎么高效安装啊?

问题描述 哪位大神知道搜云的30G数据库怎么高效安装啊? 下了前段时间比较火的搜云社工库的30G数据,经过漫长的下载,漫长的合并压缩,再解压缩,最后得到一个30G的bak文件,我下载了sqlsever,谁能告诉我怎么高效的使用这个数据啊...我也下载了搜云的网站源码,可是,这些数据库怎么导入mysql啊????? 解决方案 http://zhidao.baidu.com/link?url=_DIHTOoVZ71Erws0frHHl1--UZbElkL2h8mOmQJhUNkWWknppH4Mlp

Navicat出现这个报错 哪位大神帮忙看下

问题描述 Navicat出现这个报错 哪位大神帮忙看下 今天重装了C盘之后 打开navicat就这样了 本人小白 不明白这个报错是什么意思 解决方案 是我的mysql出现问题了吗 如果是 我已经重新安装mysql好几次了 还是有这样的错误 不明白 解决方案二: 没遇到过这问题,度娘吧

浏览器-myeclipse中的Jsp页面的ajax怎么一直实现不了,哪位大神给看看。。。

问题描述 myeclipse中的Jsp页面的ajax怎么一直实现不了,哪位大神给看看... function ajax(){ //声明一个空对象 用来装入xmlhttprequest对象 var xmlhttpreq=null; // 首先判断浏览器的使用情况,然后给XMLHttpRequest对象赋值,进行实例化 if (window.ActiveXObject){ xmlhttpreq = new ActiveObject("Microsoft.XMLHTTP"); }else i

mysql-eclipseEE连接My SQL出现问题,哪位大神可以帮我看看*^__^*,非常感谢

问题描述 eclipseEE连接My SQL出现问题,哪位大神可以帮我看看*^__^*,非常感谢 我是想连接MySQL和server SQL数据库,一般来说是在eclipse,通过buil path,然后add external jar配置就可以了,但是我尝试了这样去配置,结果还是不行.然后呢,我有特意去配置了我的环境变量,就是通过"我的电脑--系统--设置环境变量"建立一个classpath变量,然后把驱动的路径作为其变量,但是结果还是不行.最后,我认为可能是版本的驱动问题,然后我就

angularjs-这段代码哪里有错啊,运行结果不对啊,哪位大神解决下。

问题描述 这段代码哪里有错啊,运行结果不对啊,哪位大神解决下. <!doctype html> Hello {{ clock}}! function MyController($scope, $timeout) { var updateClock = function() { $scope.clock = new Date(); $timeout(function() { updateClock(); }, 1000); }; updateClock(); }; 运行结果如下: 解决方案 请稍