我有兩個查詢顯示性能差異很大。在SQL Server中針對相同查詢的不同性能
這兩個查詢是相似的,但選擇不同的值。一個查詢產生359.890行,執行時間比另一個查詢快,而另一個查詢只返回51.439行。
我不明白爲什麼行數少的查詢有更高的執行時間?
我想問題是在加入vd.MComercial = m.Material_Comercial
或and vd.codigo_organizacion = M.Codigo_Organizacion
,但我不知道如何分析這些結果。我看過這個領域的價值觀,他們是一樣的。
如果我嘗試複製臨時表中的值,性能很好。少於4秒。我不明白爲什麼會這樣。有人知道我如何分析這個問題嗎?
select COUNT(*)
from _T_VENTAS_DIARIAS as VD
left join _CAT_materiales M on vd.MComercial = m.Material_Comercial
and vd.codigo_organizacion = M.Codigo_Organizacion
where Año = 2014
and Semana = 27
and M.Material_Comercial is not null
返回「359890」。
select vd.codigo_organizacion, sum(Vta_Bruta)
from _T_VENTAS_DIARIAS as VD
left join _CAT_materiales M on vd.MComercial = m.Material_Comercial
and vd.codigo_organizacion = M.Codigo_Organizacion
where Año = 2014
and Semana = 27
and M.Material_Comercial is not null
group by vd.codigo_organizacion
該查詢較快,< 4s。
select COUNT(*) from _T_VENTAS_DIARIAS as VD
left join _CAT_materiales M on vd.MComercial = m.Material_Comercial
and vd.codigo_organizacion = M.Codigo_Organizacion
where Año = 2014
and Semana = 28
and vd.dia_calendario = 'lunes'
and M.Material_Comercial is not null
返回「51439」。
select vd.codigo_organizacion, sum(Vta_Bruta)
from _T_VENTAS_DIARIAS as VD
left join _CAT_materiales M on vd.MComercial = m.Material_Comercial
and vd.codigo_organizacion = M.Codigo_Organizacion
where Año = 2014
and Semana = 28
and vd.dia_calendario = 'lunes'
and M.Material_Comercial is not null
group by vd.codigo_organizacion
這個查詢很慢:> 120
什麼是您的模式/您的索引? –
在不知道已經請求的模式/索引的情況下,這將是幾乎不可能解決的,但也是每個查詢的執行計劃。使用「SET STATISTICS IO ON」選項來運行也是值得的,以顯示每個查詢的讀取次數。 – GarethD
我最大的猜想是你沒有包含'vd.dia_calendario'的索引,因此每行都需要對你選擇的值進行文本搜索,在本例中爲'lunes'。較大的數據集不一定會因爲音量變大而變慢。這是搜索,可能是昂貴的。 –