簡體   English   中英

改善SQL Anywhere查詢

[英]Improving SQL Anywhere query

我正在使用SQL Anywhere作為數據庫。

我有兩個表SALES DETAIL (POSDETAIL)和Inventory Adjusted表( AdjustInventory ),並創建和查詢以顯示銷售和浪費/調整后的查詢。

輸出應該是這樣的

Product   SalesQty  Value    WastageQty    Value
------------------------------------------------

銷售數量將來自POSDETAIL表,而WastageQty將來自AdjustInventory

POSDETAIL共有435625條記錄, AdjustInventory共有183528條記錄。

我在下面的查詢中設計了它,可以根據需要提供完善的查詢,但是問題是查詢非常慢,幾乎需要10到15毫秒才能顯示任何日期范圍內的任何特定數據。

此查詢是需要優化的,此處是調整。

select    
    p.OrderDate, p.ProductId, p.SalesQty,
    f.WastedQty / p.SalesQty as WastedQty,
    p.NetCost, p.EachCost
from
    (select 
         POSDETAIL.PRODNUM as ProductId,
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate, 
         POSDETAIL.NETCOSTEACH as NetCost,POSDETAIL.COSTEACH as EachCost,
         SUM(POSDETAIL.QUAN) as SalesQty
     from 
         DBA.POSDETAIL
     group by 
         POSDETAIL.PRODNUM, POSDETAIL.NETCOSTEACH, POSDETAIL.COSTEACH, 
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
) as p (ProductId, OrderDate, NetCost, EachCost, SalesQty) 
left outer join
    (select 
         DBA.AdjustInventory.INVENNUM as ProductId,
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate,
         SUM(AdjustInventory.ADJUSTUNITS) as WastedQty
     from 
         DBA.POSDETAIL
     join 
         DBA.AdjustInventory on DBA.POSDETAIL.PRODNUM = DBA.AdjustInventory.INVENNUM
                             and DBA.AdjustInventory.AdjustType = 9 
                             and DATEFORMAT(DBA.AdjustInventory.AdjustTime,'yyyy/mm/dd') = DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
     group by 
         DBA.AdjustInventory.INVENNUM, DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
    ) as f(ProductId, OrderDate, WastedQty) on p.ProductId = f.ProductId and p.OrderDate = f.OrderDate;

請幫忙

好的,這可能是您的問題。 切勿在嵌套選擇中分組。 1.拉出選擇,使其成為臨時表。
2.索引臨時表3.將臨時表連接到外部查詢。

您應該可以在這里執行兩次,這確實有幫助。

not 100% sure of syntax for SQL

select 
         POSDETAIL.PRODNUM as ProductId,
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate, 
         POSDETAIL.NETCOSTEACH as NetCost,POSDETAIL.COSTEACH as EachCost,
         SUM(POSDETAIL.QUAN) as SalesQty
     from 
         DBA.POSDETAIL
     into #P
     group by 
         POSDETAIL.PRODNUM, POSDETAIL.NETCOSTEACH, POSDETAIL.COSTEACH, 
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')

select 
         DBA.AdjustInventory.INVENNUM as ProductId,
         DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd') as OrderDate,
         SUM(AdjustInventory.ADJUSTUNITS) as WastedQty
     from 
         DBA.POSDETAIL
     Into #F
     join 
         DBA.AdjustInventory on DBA.POSDETAIL.PRODNUM = DBA.AdjustInventory.INVENNUM
                             and DBA.AdjustInventory.AdjustType = 9 
                             and DATEFORMAT(DBA.AdjustInventory.AdjustTime,'yyyy/mm/dd') = DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')
     group by 
         DBA.AdjustInventory.INVENNUM, DATEFORMAT(POSDETAIL.TIMEORD,'yyyy/mm/dd')




select    
    p.OrderDate, p.ProductId, p.SalesQty,
    f.WastedQty / p.SalesQty as WastedQty,
    p.NetCost, p.EachCost
from #p (ProductId, OrderDate, NetCost, EachCost, SalesQty)
Left outer Join #f
     on p.ProductId = f.ProductId and p.OrderDate = f.OrderDate;

自從我使用SQL Anywhere以來已有16年了,很抱歉,這是偽代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM