2013-03-21 119 views
5

我應該擔心實體框架linq查詢子句在性能方面的順序嗎?EF linq查詢子句的順序是否影響性能?

在下面的示例中,可以更改where子句對數據庫查找的性能影響的順序嗎?

 using (var context = new ModelContext()) 
     { 
      var fetchedImages = (from images in context.Images.Include("ImageSource") 
           where images.Type.Equals("jpg") 
           where images.ImageSource.Id == 5 
           select images).ToArray(); 
     } 
+1

使用'&&'檢查生成的SQL,如果它們相同,那麼不應該有任何區別 – Habib 2013-03-21 08:16:27

回答

4

不,更改這兩個where子句不會影響性能。 生成的SQL看起來像這樣反正:

WHERE [condition1] AND [condition2] 

此外,你可以寫條件下,用邏輯運算符組合:

where images.Type.Equals("jpg") && images.ImageSource.Id == 5 
+0

只有當您忽略短路時:如果[[condition2]'爲false更多通常比'[condition1]'多,所以您可能會通過交換訂單來看到性能提升。 – RoadieRich 2013-03-21 09:10:04

+0

@RoadieRich:雖然你在理論上是正確的,但是你真的相信,當交換這兩個條件時,你可能會看到**有任何區別嗎? :) – Dennis 2013-03-21 09:29:29

+0

給定一個適當的大數據集,是的,你可能會。 – RoadieRich 2013-03-21 09:35:39

-1

一般情況是where運營商將「短路」,所以如果第一個是錯誤的,第二個將不會被檢查,所以如果更頻繁地失敗,通常你首先要檢查它。

但是,如果更頻繁的故障處理緩慢,則會崩潰。

要確定的唯一方法是通過使用適當的工具分析代碼。

+0

雖然對於LINQ到對象來說是正確的,但他特別聲明「對數據庫查找具有性能影響」,而這個答案不適用。一旦它被轉換爲SQL,數據庫提供商將決定如何處理它(如Gert Arnold在其他答案中所述)。 – Ocelot20 2013-03-21 13:09:59