簡體   English   中英

優化SQL SERVER 2005查詢

[英]Optimizing SQL SERVER 2005 query

早上好,

我得到了SQL查詢的這一部分:

WITH HC AS (
    SELECT Dia, Mes, Anyo, Hora, Energia AS HidroConv 
    FROM Calendar 
    LEFT OUTER JOIN OMP_PDBC_STOTA O 
        ON Calendar.Y = O.Anyo AND Calendar.M = O.Mes 
        AND Calendar.D = O.Dia AND Calendar.H = O.Hora 
    WHERE (Codigo = 1) AND Calendar.dt BETWEEN '12/31/2013' AND '01/01/2014')

SELECT Calendar.dt AS Fecha, Calendar.Y, Calendar.M, Calendar.D, Calendar.H, 
       HC.HidroConv
FROM Calendar 
LEFT OUTER JOIN HC 
     ON Calendar.Y = HC.Anyo AND Calendar.M = HC.Mes 
     AND Calendar.D = HC.Dia AND Calendar.H = HC.Hora 
WHERE dt BETWEEN '12/31/2013' AND '01/01/2014' 
ORDER by dt, h

在WITH部分,我還有另外12個查詢。 然后,在SELECT部分​​,我在WITH部分的每個SELECT檢索一列。 在“ FROM”部分,每個成員都有一個“左外部”聯接,在聯接的左側始終具有“日歷”。

這個大查詢的執行耗時超過2分鍾,而我非常需要將時間減少到15秒或更短。 其中一些表(例如OMP_PDBC_STOTA)具有300萬行。

您對如何優化此查詢有任何想法嗎?

非常感謝你的幫助。

里卡多

此查詢是否提供相同的輸出?

SELECT Calendar.dt AS Fecha, Calendar.Y, Calendar.M, Calendar.D, Calendar.H, Energia AS HidroConv
FROM Calendar 
    LEFT OUTER JOIN OMP_PDBC_STOTA O 
        ON Calendar.Y = O.Anyo AND Calendar.M = O.Mes 
        AND Calendar.D = O.Dia AND Calendar.H = O.Hora 
WHERE  
    Calendar.dt BETWEEN '12/31/2013' AND '01/01/2014' 
    AND Codigo = 1
ORDER by dt, h

如果是這樣,它會更快,請告訴我如果我錯了,我會幫助您。

我發現我並不需要日歷來獲得相同的結果。

您如何看待這種做法?

SELECT  anyo, mes, dia, hora, Energia AS HidroConv
FROM OMP_PDBC_STOTA
WHERE  
    CAST(CAST(mes AS VARCHAR) + '/' + CAST(dia AS VARCHAR) + '/' + CAST(anyo AS VARCHAR) as datetime) BETWEEN '12/31/2013' AND '01/01/2014' 
    AND Codigo = 1
ORDER by mes,dia, hora

雖然找不到將smallints(mes,dia,anyo)轉換為日期時間的正確方法。

暫無
暫無

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

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