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