2011-08-31 19 views
0

我有一個大型表格,下面有一個示例查詢來檢索匹配的結果。有多個外部應用行的大表比較性能

Select col1,col2,col3 
from 
Table1 T1 
OUTER APPLY (select col2 from Table2 Where t2id=T1.id) 
OUTER APPLY (select col3 from Table3 Where t3id=T1.id) 
Where col3>0 

的問題是它的運行非常緩慢,當我有Where子句列值檢查。

我已經嘗試過不同的方法,包括CROSS APPLY,沒有任何改進的性能。

有什麼想法?

+1

後查詢計劃....加上表的阿赫瑪書房,再加上這些表 –

+1

定義的索引既然你對一列從第二外比較適用於你不需要它是外部的,但可以改爲交叉應用。在查詢計劃中可能會有所不同。 –

+1

只是一個愚蠢的問題:這個查詢不能被重寫爲'SELECT T1.col1,T2.col2,T3.col3 FROM Table1 T1 LEFT JOIN Table2 T2 ON T1.id = T2.t2id LEFT JOIN Table3 T3 ON T1.id = T3 .t3id WHERE T3.col3> 0'?如果答案是肯定的,這個查詢是更快,更慢還是需要同一時間? – Marco

回答

1

嘗試在select語句內移動where子句。這將導致更少的行來計算,因此更快的結果

Select col1,col2,col3 
from 
Table1 T1 
OUTER APPLY (select col2 from Table2 Where t2id=T1.id) 
OUTER APPLY (select col3 from Table3 Where t3id=T1.id Where col3>0)