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