sql-谁能解答下为什么这两个SQL,只是关联顺序不一样,性能差别那么大

问题描述

谁能解答下为什么这两个SQL,只是关联顺序不一样,性能差别那么大

第一个 :
SELECT
a.request_detail_id,
a.vendorid,
a.request_id,
a.s1,
a.s2,
a.s3,
a.s4,
a.profit,
a.ratio,
a.requestqty,
a.stockqty,
a.sponroadqty,
a.reqonroadqty,
a.reqpurqty,
a.piqty,
a.ispurchase,
a.remark,
a.skuid,
a.v_req_detail_id,
a.is_rollback_collection,
a.v_req_detail_id_sort,
a.reqdeliverydate,
b.sku,
b.description,
bi.purspec,
bi.purdesc,
a.purpkgid,
a.skulabel,
a.skulabel skulable,
a.purpkg,
a.stopkg,
a.purnote1,
a.purnote2,
-- IFNULL(sup.minqty ,- 1) AS minqty,
o. STATUS,
o.shipping_date,
SUM(
CASE
WHEN o.shipping_date >= '2015-06-15' THEN
d.quantity
ELSE
0
END
) AS quantityT,
SUM(
CASE
WHEN o.shipping_date >= '2015-05-16'
AND o.shipping_date < '2015-06-15' THEN
d.quantity
ELSE
0
END
) AS quantityS,

SUM(
    CASE
    WHEN o.shipping_date >= '2015-04-16'
    AND o.shipping_date < '2015-05-16' THEN
        d.quantity
    ELSE
        0
    END
) AS quantityN

FROM
rs_request_detail a
LEFT JOIN rs_request rq ON rq.request_id = a.request_id
INNER JOIN bs_item_locale b ON a.skuid = b.skuid
AND b.lang_id = 1
INNER JOIN bs_item bi ON a.skuid = bi.skuid
LEFT JOIN (
SELECT
psi.skuid,
IFNULL(
MIN(

            IF (
                psi.minqty = 0,
                999999999,
                psi.minqty
            )
        ) ,- 1
    ) AS minqty
FROM
    pr_supplier_item psi
LEFT JOIN pr_supplier ps ON ps.supplierid = psi.supplierid
AND ps.inactive = 1
WHERE
    psi.itemstatus = 4
GROUP BY
    skuid

) AS sup ON sup.skuid = a.skuid
LEFT JOIN so_order_detail d ON d.skuid = b.skuid
LEFT JOIN so_order o ON o.order_id = d.order_id AND o. STATUS = 4 and o.shipping_date < '2015-05-16'

WHERE
(1 = 1)
AND a.request_id = 15259
AND b.lang_id = 1
GROUP BY
a.request_detail_id
ORDER BY
a.v_req_detail_id_sort DESC,
a.v_req_detail_id ASC,
a.reqpurqty DESC
LIMIT 0,100

SELECT
a.request_detail_id,
a.vendorid,
a.request_id,
a.s1,
a.s2,
a.s3,
a.s4,
a.profit,
a.ratio,
a.requestqty,
a.stockqty,
a.sponroadqty,
a.reqonroadqty,
a.reqpurqty,
a.piqty,
a.ispurchase,
a.remark,
a.skuid,
a.v_req_detail_id,
a.is_rollback_collection,
a.v_req_detail_id_sort,
a.reqdeliverydate,
b.sku,
b.description,
bi.purspec,
bi.purdesc,
a.purpkgid,
a.skulabel,
a.skulabel skulable,
a.purpkg,
a.stopkg,
a.purnote1,
a.purnote2,
IFNULL(sup.minqty ,- 1) AS minqty,
o. STATUS,
o.shipping_date,
SUM(
CASE
WHEN o.shipping_date >= '2015-06-15' THEN
d.quantity
ELSE
0
END
) AS quantityT,
SUM(
CASE
WHEN o.shipping_date >= '2015-05-16'
AND o.shipping_date < '2015-06-15' THEN
d.quantity
ELSE
0
END
) AS quantityS,

SUM(
    CASE
    WHEN o.shipping_date >= '2015-04-16'
    AND o.shipping_date < '2015-05-16' THEN
        d.quantity
    ELSE
        0
    END
) AS quantityN

FROM
rs_request_detail a
LEFT JOIN rs_request rq ON rq.request_id = a.request_id
INNER JOIN bs_item_locale b ON a.skuid = b.skuid
AND b.lang_id = 1
INNER JOIN bs_item bi ON a.skuid = bi.skuid

LEFT JOIN so_order_detail d ON d.skuid = b.skuid
LEFT JOIN so_order o ON o.order_id = d.order_id AND o. STATUS = 4 and o.shipping_date < '2015-05-16'
LEFT JOIN (
SELECT
psi.skuid,
IFNULL(
MIN(

            IF (
                psi.minqty = 0,
                999999999,
                psi.minqty
            )
        ) ,- 1
    ) AS minqty
FROM
    pr_supplier_item psi
LEFT JOIN pr_supplier ps ON ps.supplierid = psi.supplierid
AND ps.inactive = 1
WHERE
    psi.itemstatus = 4
GROUP BY
    skuid

) AS sup ON sup.skuid = a.skuid

WHERE
(1 = 1)
AND a.request_id = 15259
AND b.lang_id = 1
GROUP BY
a.request_detail_id
ORDER BY
a.v_req_detail_id_sort DESC,
a.v_req_detail_id ASC,
a.reqpurqty DESC
LIMIT 0,100

解决方案

这语句也太长了吧,你只说哪里不同性能不同就可以了

解决方案二:

看LEFT JOIN结合的表的记录数,如果结合的记录数越少越快,表记录少的放前面越快。

解决方案三:

LEFT JOIN 哪个在前哪个当主表来关联数据,前的全部显示,后的只显示有关联到的数据其他null显示

时间: 2024-08-01 12:09:26

sql-谁能解答下为什么这两个SQL,只是关联顺序不一样,性能差别那么大的相关文章

求解答-求数据库高手两个SQL语句 多少说两句给个思路也行啊 谢谢

问题描述 求数据库高手两个SQL语句 多少说两句给个思路也行啊 谢谢 点击搜索显示列表项SQL语句怎么写 insert语句又该怎么写 解决方案 一些求数据库对象的SQL语句 解决方案二: 这是要查多个表的内容,所以在使用连接查询

php编程-在mysqli-&amp;amp;gt;query()语句中遇到的两个问题,求大神解答下

问题描述 在mysqli->query()语句中遇到的两个问题,求大神解答下 <?php $mysqli=new mysqli("localhost", "root", "", "test"); if($mysqli->connect_error){ die( "connection failed".$mysqli->connect_error); }else{ echo "

求大神解答一下-求大神解答下这两道题目。。。。

问题描述 求大神解答下这两道题目.... 下面的题目是什么意思啊? 所有程序代码中状态显示定义到指定中类,还再进行本地判断 来源于DictionaryActivate.cs DictionaryActivate Activate = new DictionaryActivate(); 还有就是 if (Request.HttpMethod == "POST") { postapp(); } else if (Request.HttpMethod == "GET")

两台Sql server数据同步

server|数据|数据同步 复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性. SQL复制的基本元素包括 出版服务器.订阅服务器.分发服务器.出版物.文章 SQL复制的工作原理 SQL SERVER 主要采用出版物.订阅的方式来处理复制.源数据所在的服务

两台SQL Server数据同步解决方案

server|解决|数据|数据同步 复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式.使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据.复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性. SQL复制的基本元素包括 出版服务器.订阅服务器.分发服务器.出版物.文章 SQL复制的工作原理 SQL SERVER 主要采用出版物.订阅的方式来处理复制.源数据所在

ssl证书生成与配置问题,求大神解答下。

问题描述 ssl证书生成与配置问题,求大神解答下. 刚刚接触ssl 证书加密,只在自己的机器上试用了下,有两个问题不太懂,求解答下. 1,我在自己的机器上生成客户端.服务器证书,然后相互认证,配置tomcat.web.xml, 如果我在客户端在另一台机器上,我是不是把客户端证书拷贝到另一台机器上就可以正常访问了. 2,在1成立的基础上,如果有成千上万台客户端,证书都配置.拷贝完毕.突然服务器证书意外损坏,这时按照生成服务器证书的参数重新生成证书,能不能正常使用?如果不能,由于修改客户端证书工作量

遇到一个棘手的问题,需要java网络编程大神帮忙解答下~

问题描述 遇到一个棘手的问题,需要java网络编程大神帮忙解答下~ 问题是这样的: 我把MINA核心的非阻塞轮训方式的的代码用JDK7的AIO异步IO替换了,现在已经包装完成,测试的时候遇到两个问题: 测试的是这样的,服务端启动后20秒后释放所有资源关闭,客户端启动15秒后释放所有资源关闭,大部分情况下测试都是正常的,但是偶尔会出现客户端服务端都关闭后,再次启动服务的过程后,要么服务端抛出AsynchronousCloseException,客户端抛出远程主机强迫关闭一个现有连接:要么是客户端的

c# 代码问题-刚解除 请求大神解答下呗 谢谢

问题描述 刚解除 请求大神解答下呗 谢谢 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.OleDConnection; namespace person

java编程-有个java的问题想问问大家,欢迎进来帮忙解答下,谢谢

问题描述 有个java的问题想问问大家,欢迎进来帮忙解答下,谢谢 为什么这段代码运行结果0和3呢? public class Test { static int a; static int i=3; public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(a+" "+i); } } 解决方案 静态Int变量默认为0 解决方案二: 是的,这个static变