繁体   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