2010-01-29 83 views
2

我有一個SQL需要7分鐘才能執行。它處理一年的數據,但即使如此,我覺得它需要很長時間。你有任何建議來優化它嗎?優化sql查詢

select count(s.numserviciomedico) AS total 
from Actos a, 
    pacientes p, 
    Historias h, 
    serviciosmedicos s 
where p.codigo=h.codpaciente 
    AND p.codigo=a.codPaciente 
    AND p.codigo = s.codPaciente 
    AND h.codPaciente = a.codPaciente 
    AND a.codpaciente=s.codPaciente 
    AND h.numHistoria = a.numHistoria 
    AND h.numHistoria = s.numHistoria 
    AND a.numHistoria = s.numHistoria 
    AND a.numActo = s.numActo 
    AND h.codSeccion=a.codSeccion 
    and p.codcompañia ='38' 
    and a.codseccion ='9' 
    and (CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) >='20090101') 
    and (CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) <='20091231') 
    and h.modo ='Urgente' 
    and datename(weekday,a.fecatencion)!= 'Sabado' 
    and datename(weekday,a.fecatencion)!= 'Domingo' 
    and CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) NOT IN (
     select fechafestiva 
     from diasfestivos 
    ) 
+1

你看過執行計劃了嗎? – 2010-01-29 08:21:12

+0

請在您的項目中使用一些正確的代碼格式,例如SO和其他論壇。例如。就像我剛剛做的 – 2010-01-29 08:27:46

+0

測試我已經看到了這部分中的問題繼電器: 和CAST(FLOOR(CAST(a.fecAtencion AS float))AS datetime)NOT IN(從diasfestivos選擇fechafestiva) 如果我評論它的查詢在1秒內執行... – VSP 2010-01-29 09:38:48

回答

2

至少...

更改此

and (CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) >='20090101') and (CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) <='20091231') 

a.fecAtencion >= '20090101' AND a.fecAtencion < '20100101 

並使用 「加入」

而且

CAST(FLOOR(CAST(a.fecAtencion AS float)) AS datetime) NOT IN (select fechafestiva from diasfestivos) 

..to是

NOT EXISTS (SELECT * FROM diasfestivos af WHERE a.fecAtencion >= af.fechafestiva AND a.fecAtencion < af.fechafestiva + 1) 

這是假定diasfestivos少行,它的便宜,除去時間有

+0

評論轉移到主 – VSP 2010-01-29 09:42:12

+0

看來你不存在消解工作:)謝謝 – VSP 2010-01-29 10:01:55

1

SQL關鍵字「IN」通常是一個不錯的人選來代替。

和NOT EXISTS (選擇diasfestivos fechafestiva其中CAST(FLOOR(CAST(a.fecAtencion爲float))AS DATETIME)= fechafestiva)

什麼用日期時間鑄造了?

+0

使用這個改變需要比原來的7多一點時間:28分鐘 – VSP 2010-01-29 09:58:42