2012-08-10 40 views
0

以下查詢在針對SQL Server CE數據庫運行sql時運行速度非常慢,我曾希望將其轉換爲EF的linq。任何人都可以建議,我還沒有在SQL Server CE上創建任何索引。表2有100,000行。SQL Server CE存在子句性能

SELECT 
    * 
FROM 
    Table1 T1a 
WHERE 
    EXISTS 
(
SELECT 
    NULL 
FROM 
    Table2 T2 
     JOIN Table1 T1b ON T2.Field1 = T2.Field1 
WHERE 
    T2.SomeID = 12345 AND 
    T1a.SomeString = T1b.SomeString 
) 
ORDER BY 
    T1a.SomeString, 
    T1a.AnotherString 
+0

「我還沒有寫入索引」 - 那就是問題了。您需要索引才能獲得更好的性能。 – 2012-08-10 23:32:42

+0

就像在SQL Server中一樣嗎?這個查詢中的任何明顯的? – 2012-08-10 23:36:23

+0

你是不是要在'T2.Field1 = T1b.Field1'上寫'JOIN Table1 T1b'?當前寫入'T2.Field1 = T2.Field1'的方式與1 = 1的加入相同。 – RThomas 2012-08-10 23:54:57

回答

1

只考慮給出的信息。

對我來說T2.SomeID將是索引開始的最明顯的地方。之後,您可能會看到T2.Field1,因爲它在連接中使用(可能還有T1.Field1,具體取決於T1中的行數)。下一個可能會是T1.SomeString,因爲它的比較使用以及它被用於某種排序。

不是T2.SomeID但是它的種類取決於數據的構成,每個值的基數,表中有多少行,還有多少其他查詢。有多少更新VS查找將等等等等等等。

+0

謝謝。表2有250,000行,表1有1500.這主要是唯一的查詢,不需要更新。 – 2012-08-10 23:48:53