2009-06-01 69 views
1

我重載了查詢SQL數據庫的vb.net搜索過程。 我用作比較的舊方法之一是使用存儲過程來執行搜索並返回查詢。 我的新方法使用linq。Linq to SQL性能使用包含

我對使用linq包含查詢時的性能略有擔憂。我正在查看使用這兩種方法的同樣可比的查詢。
基本上有1條子句到 以下是一些分析器結果;

Where name = "ber10rrt1" 
  • Linq查詢:24reads
  • 存儲查詢:111reads

    其中name = 「%ber10%」

  • Linq查詢:53174reads

  • 存儲過程的查詢: 23386reads

忘了片刻,索引(不是我的數據庫)...事實是這兩個方法都從根本上執行相同的查詢(雖然存儲過程確實引用了某些表的視圖) 。

這是否與其他人對linq to sql的體驗一致?

另外,有趣的是,

  • 使用像 「BER10%」

  • resultset.Where(功能(C)c.ci.Name.StartsWith(名))

結果在使用13125reads的storedproc和LINQ使用8172reads

+0

其中name =「%ber10%」 - 你的意思是?另外 - 有沒有問題? – 2009-06-01 08:41:10

回答

2

我不確定是否有足夠的完整分析...我假設我們在這裏談論string.Contains/string.StartsWith(而不是List<T>.Contains)。

如果生成的TSQL類似,那麼結果應該是可比較的。有幾點需要注意 - 例如,查詢列是一個計算+持久值?如果是這樣,SET選項必須完全匹配,才能「按原樣」使用(否則必須重新計算每行)。

所以:什麼是SP和LINQ的TSQL?它們是直接可比的嗎? 你提到了一個VIEW - 我猜如果(例如)它過濾掉數據(通過WHEREINNER JOIN),這可能會產生很大的差異。

另外 - LIKE%開始的條款很少是一個好主意 - 並非最不重要,它不能有效地使用任何索引。使用「全文搜索」你可能會有更好的表現;但是這不是通過LINQ直接可用的,所以你必須將它包裝在SP中,並通過LINQ數據上下文暴露SP(只需將SP拖入設計器)。

我的錢是VIEW(和SP中的其他代碼)是這裏的主要區別。

+0

我正在使用.contains(),因爲它似乎用戶需要此功能。 .startswith()確實有更好的性能。視圖只加入我加入linq的表格,所以不需要額外的過濾。 – GordonB 2009-06-01 08:50:15