Sql T.DATASET='CMP' 而圣彼得堡则

Sql T.DATASET='CMP' 而圣彼得堡则,sql,performance,oracle,query-optimization,Sql,Performance,Oracle,Query Optimization,最后,请注意,由于表、列和条件的数量之多,如果上面的查询是100%正确的,我会感到震惊。我尽了最大努力,但我的努力可能还不够好:)可能需要调整。您选择的减慢查询速度的选项有以下原因: 数学(小于)可以不使用案例索引。考虑 如果列表较小,则更改为in列表 如果没有如下所示的索引,则速度会很慢 一开(ST.item\u编号、ST.dataset、流程中的ST.status\u、ST.dctype) XAL_主管上的一个(项目编号) max可以使用datephysical上的一个,因为它会导致orde

最后,请注意,由于表、列和条件的数量之多,如果上面的查询是100%正确的,我会感到震惊。我尽了最大努力,但我的努力可能还不够好:)可能需要调整。

您选择的减慢查询速度的选项有以下原因:

  • 数学(小于)可以不使用案例索引。考虑
    如果列表较小,则更改为in列表

  • 如果没有如下所示的索引,则速度会很慢

    一开(ST.item\u编号、ST.dataset、流程中的ST.status\u、ST.dctype) XAL_主管上的一个(项目编号) max可以使用datephysical上的一个,因为它会导致order by

  • 考虑首先对所有where子句运行query,然后基于它执行max

  • 如果不使用索引,有很多原因。WHERE子句中的数学,如果大ROWCUTE,然后明确地考虑项目1,因此将使用索引。此外,若列可以为null,则可以使用基于函数的索引

    减慢查询速度的选择有以下原因:

  • 数学(小于)可以不使用案例索引。考虑
    如果列表较小,则更改为in列表

  • 如果没有如下所示的索引,则速度会很慢

    一开(ST.item\u编号、ST.dataset、流程中的ST.status\u、ST.dctype) XAL_主管上的一个(项目编号) max可以使用datephysical上的一个,因为它会导致order by

  • 考虑首先对所有where子句运行query,然后基于它执行max

  • 如果不使用索引,有很多原因。WHERE子句中的数学,如果大ROWCUTE,然后明确地考虑项目1,因此将使用索引。此外,若列可以为null,则可以使用基于函数的索引

    检查您的表
    STOCKTRANS
    是否正确索引这里有一些顾问,他们通过调整他人的劣质代码而过上了非常好的生活。如果是simp,他们就不会收这么多钱;只需看一个问题,然后说“在那里更改那一行”。有许多因素可能会导致性能不佳。数据量、数据倾斜、坏磁盘、内存不足、陈旧统计信息、缺少索引、错误索引、磁盘排序。写得不好的SQL只是其中之一。正如@Majid所说:检查是否有正确的索引以及查询计划是否实际使用了它们。检查您的表
    STOCKTRANS
    是否正确索引这里有一些顾问,他们通过调整别人的劣质代码而过上了很好的生活。如果是simp,他们就不会收这么多钱;只需看一个问题,然后说“在那里更改那一行”。有许多因素可能会导致性能不佳。数据量、数据倾斜、坏磁盘、内存不足、陈旧统计信息、缺少索引、错误索引、磁盘排序。糟糕的SQL只是其中之一。正如@Majid所说:检查是否有正确的索引以及查询计划是否实际使用了它们。感谢您的帮助!谢谢你的帮助,艾德!谢谢你的帮助,康拉德!谢谢你的帮助,康拉德!
    SELECT        XAL_SUPERVISOR.SALESTABLE.SALESNUMBER, XAL_SUPERVISOR.SALESTABLE.DEBTORACCOUNT, XAL_SUPERVISOR.SALESTABLE.DELIVERYNAME, 
                         XAL_SUPERVISOR.SALESTABLE.DELIVERYADDRESS3, XAL_SUPERVISOR.SALESTABLE.REQUISNUMBER, XAL_SUPERVISOR.SALESTABLE.CUSTOMERREF, 
                         XAL_SUPERVISOR.SALESTABLE.ROUTE, XAL_SUPERVISOR.SALESTABLE.ROUTENUMBER, XAL_SUPERVISOR.SALESTABLE.CMPVWSTATUS, 
                         XAL_SUPERVISOR.SALESTABLE.CMPLOGISTIEK, XAL_SUPERVISOR.SALESTABLE.USVEHICLE, XAL_SUPERVISOR.SALESTABLE.ELCSALSTCALL, 
                         XAL_SUPERVISOR.SALESTABLE.ELCSALSTOK, XAL_SUPERVISOR.SALESTABLE.ELCEDICODE, XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER, 
                         XAL_SUPERVISOR.STOCKTABLE.ITEMNAME, XAL_SUPERVISOR.SALESTRANS.QTYORDERED, XAL_SUPERVISOR.SALESTRANS.STOCKLOC AS REGELLOC, 
                         XAL_SUPERVISOR.STOCKTABLE.STOCKLOC AS STDLOC, XAL_SUPERVISOR.SALESTABLE.DELIVERYDATE, XAL_SUPERVISOR.SALESTABLE.DATASET, 
                         XAL_SUPERVISOR.SALESTABLE.CMPCORRECTIE, XAL_SUPERVISOR.SALESTRANS.ELCORGQTYORDERED AS ORG_BESTELD, 
                         XAL_SUPERVISOR.STOCKTABLE.CMPVERVALLEN,
                             (SELECT        (SUM(STS.ENTEREDQTY) + SUM(STS.RECEIVED) - SUM(STS.DRAWN))
                               FROM            XAL_SUPERVISOR.STOCKSUM STS
                               WHERE        STS.ITEMNUMBER = XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER AND STS.DATASET = 'CMP'
                               GROUP BY STS.ITEMNUMBER) AS VOORRAAD,
                             (SELECT        SUM(STS.ORDERED)
                               FROM            XAL_SUPERVISOR.STOCKSUM STS
                               WHERE        STS.ITEMNUMBER = XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER AND STS.DATASET = 'CMP'
                               GROUP BY STS.ITEMNUMBER) AS BESTELD,
                             (SELECT        SUM(STS.RESERVPHYSICAL)
                               FROM            XAL_SUPERVISOR.STOCKSUM STS
                               WHERE        STS.ITEMNUMBER = XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER AND STS.DATASET = 'CMP'
                               GROUP BY STS.ITEMNUMBER) AS GERESERVEERD,
                             (SELECT        DDT.QTY
                               FROM            XAL_SUPERVISOR.DEBDLVTRANS DDT
                               WHERE        DDT.TRANSID = XAL_SUPERVISOR.SALESTRANS.TRANSID AND DDT.DATASET = 'CMP') AS PAKBONAANTAL,
                             (SELECT        DIT.QTY
                               FROM            XAL_SUPERVISOR.DEBINVTRANS DIT
                               WHERE        DIT.TRANSID = XAL_SUPERVISOR.SALESTRANS.TRANSID AND DIT.DATASET = 'CMP') AS FACTUURAANTAL,
                             (SELECT        MAX(ST.DATEPHYSICAL)
                               FROM            XAL_SUPERVISOR.STOCKTRANS ST
                               WHERE        ST.ITEMNUMBER = XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER AND ST.DATASET = 'CMP' AND ST.StatusInFlow < 3 AND ST.DCType = 2) 
                         AS LTSTGELEVERD
    FROM            XAL_SUPERVISOR.SALESTABLE, XAL_SUPERVISOR.SALESTRANS, XAL_SUPERVISOR.STOCKTABLE
    WHERE        XAL_SUPERVISOR.SALESTABLE.DATASET = XAL_SUPERVISOR.SALESTRANS.DATASET AND 
                         XAL_SUPERVISOR.SALESTABLE.SALESNUMBER = XAL_SUPERVISOR.SALESTRANS.SALESNUMBER AND 
                         XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER = XAL_SUPERVISOR.STOCKTABLE.ITEMNUMBER AND 
                         XAL_SUPERVISOR.SALESTRANS.DATASET = XAL_SUPERVISOR.STOCKTABLE.DATASET AND (XAL_SUPERVISOR.SALESTABLE.DELIVERYDATE = :Leverdatum) AND 
                         (XAL_SUPERVISOR.SALESTABLE.DATASET = 'CMP') AND (XAL_SUPERVISOR.SALESTABLE.CMPCORRECTIE = 0)
    
       (SELECT        MAX(ST.DATEPHYSICAL)
                               FROM            XAL_SUPERVISOR.STOCKTRANS ST
                               WHERE        ST.ITEMNUMBER = XAL_SUPERVISOR.SALESTRANS.ITEMNUMBER AND ST.DATASET = 'CMP' AND ST.StatusInFlow < 3 AND ST.DCType = 2) 
                         AS LTSTGELEVERD
    
    WITH datephysical_max as
        (SELECT Max(ST.datephysical) max_ , ST.itemnumber 
            FROM   xal_supervisor.stocktrans ST 
            WHERE  
                   AND ST.dataset = 'CMP' 
                   AND ST.statusinflow < 3 
                   AND ST.dctype = 2
            GROUP BY )  
    SELECT 
          ....,
          st.LTSTGELEVERD
    FROM   xal_supervisor.salestable 
           inner join xal_supervisor.salestrans 
                   ON xal_supervisor.salestable.dataset = 
                      xal_supervisor.salestrans.dataset 
                      AND xal_supervisor.salestable.salesnumber = 
                          xal_supervisor.salestrans.salesnumber 
                      AND xal_supervisor.salestrans.itemnumber = 
                          xal_supervisor.stocktable.itemnumber 
           inner join xal_supervisor.stocktable 
                   ON xal_supervisor.salestrans.dataset = 
                      xal_supervisor.stocktable.dataset 
           INNER JOIN datephysical_max st
                   ON ST.itemnumber = xal_supervisor.salestrans.itemnumber 
    WHERE  ( xal_supervisor.salestable.deliverydate = :Leverdatum ) 
           AND ( xal_supervisor.salestable.dataset = 'CMP' ) 
           AND ( xal_supervisor.salestable.cmpcorrectie = 0 ) 
    
    WITH StkSum AS (
      SELECT
        STS.ITEMNUMBER,
        SUM(STS.ENTEREDQTY) + SUM(STS.RECEIVED) - SUM(STS.DRAWN) AS VOORRAAD,
        SUM(STS.ORDERED) AS BESTELD,
        SUM(STS.RESERVPHYSICAL) AS GERESERVEERD,
        MAX(ST.DATEPHYSICAL) AS LTSTGELEVERD
      FROM XAL_SUPERVISOR.STOCKSUM STS
      INNER JOIN XAL_SUPERVISOR.STOCKTRANS ST ON STS.ITEMNUMBER = ST.ITEMNUMBER
      WHERE STS.DATASET = 'CMP'
        AND ST.DATASET = 'CMP'
        AND ST.StatusInFlow < 3
        AND ST.DCType = 2
    )
    SELECT
      XAL_SUPERVISOR.SALESTABLE.SALESNUMBER,
      ... all those SALESTABLE and SALESTRANS and STOCKTABLE columns ...,
      StkSum.VOORRAAD,
      StkSum.BESTELD,
      StkSum.GERESERVEERD,
      NVL(XAL_SUPERVISOR.DEBDLVTRANS.QTY, 0) AS PAKBONAANTAL,
      NVL(XAL_SUPERVISOR.DEBINVTRANS.QTY, 0) AS FACTUURAANTAL,
      StkSum.LTSTGELEVERD
    FROM XAL_SUPERVISOR.SALESTABLE
    INNER JOIN XAL_SUPERVISOR.SALESTRANS ON
      SalesTable.DataSet = SalesTrans.DataSet AND
      SalesTable.SalesNumber = SalesTrans.SalesNumber
    INNER JOIN XAL_SUPERVISOR.STOCKTABLE ON
      SalesTrans.ItemNumber = StockTable.ItemNumber AND
      SalesTrans.DataSet = StockTable.DataSet
    LEFT OUTER JOIN StkSum ON StkSum.ITEMNUMBER = SalesTrans.ITEMNUMBER
    LEFT OUTER JOIN XAL_SUPERVISOR.DEBDLVTRANS DDT ON DDT.TRANSID = SalesTrans.TRANSID
    LEFT OUTER JOIN XAL_SUPERVISOR.DEBINVTRANS DIT ON DIT.TRANSID = SalesTrans.TRANSID
    WHERE
      (XAL_SUPERVISOR.SALESTABLE.DELIVERYDATE = :Leverdatum) AND 
      (XAL_SUPERVISOR.SALESTABLE.DATASET = 'CMP') AND
      (XAL_SUPERVISOR.SALESTABLE.CMPCORRECTIE = 0) AND
      DDT.DATASET = 'CMP' AND
      DIT.DATASET = 'CMP'