[英]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.