2009-06-01 6 views
1

私はSQLデータベースを照会するvb.net検索手順をオーバーロードしています。 私は比較として使用している古いメソッドの1つは、ストアドプロシージャを使用して検索を実行し、クエリを返します。 私の新しいメソッドはlinqを使用しています。Linq to SQLを使用してパフォーマンスを含める

linqでのクエリを使用すると、パフォーマンスが少し心配です。私は両方のメソッドを使用して同等に匹敵するクエリを探しています。
基本的に1 where句を に持っているここにいくつかのプロファイラ結果があります。

Where name = "ber10rrt1" 
  • LINQクエリ:24readsは
  • ストアドクエリ:111reads

    名前は= "%ber10%"

  • LINQクエリ:53174reads

  • ストアドプロシージャのクエリ: 23386reads
一瞬忘れる

、インデックス(ない私のデータベース)...問題の事実は、(ストアドプロシージャとはいえ、テーブルの[一部]のビューを参照しない)両方の方法は、基本的に同じクエリを実行しているということです。

これはlinq to sqlの他の人々の経験と合っていますか?

また、興味深いことに十分です。 "BER10%" のように使用

  • resultset.Where(関数(C)c.ci.Name.StartsWith(名))13125readsを使用してストアドプロシージャ値で

結果とlinqを使用して8172reads

+0

ここでname = "%ber10%" - あなたはどういう意味ですか?また、質問がありましたか? –

答えて

2

私は完全な分析のためにそこに十分ではない...私たちはstring.Contains/string.StartsWithここではないと仮定している(ではない)。

生成されたTSQLが似ている場合、結果は同等でなければなりません。これにはいくつかの注意点があります。たとえば、クエリ列は計算された値+永続化された値ですか?その場合、SETのオプションは完全に一致する必要があります。それは、「そのまま」使用できます(それ以外の場合は、1行ごとに再計算する必要があります)。

So:SPとLINQのTSQLは何ですか?彼らは直接比較可能ですか? あなたはVIEWと言及しています - これは、(例えば)WHEREまたはINNER JOINを介してデータをフィルタリングすると、大きな違いになると思います。

また、%を開始する節は、めったに良いアイデアではありません。少なくとも、どのインデックスも有効に使用することはできません。 「フルテキスト検索」を使用するとパフォーマンスが向上する可能性があります。これはLINQを介して直接入手することはできませんので、SPでラップし、LINQデータコンテキストを介してSPを公開する必要があります(SPをデザイナにドラッグするだけです)。

VIEW(およびSPの他のコード)には、私のお金はが主な違いです。

+0

私はこの機能を必要としているように.contains()を使用していました。 .startswith()の方がはるかに優れたパフォーマンスを示します。 ビューは、linqで結合しているテーブルだけを結合するので、余分なフィルタは必要ありません。 – GordonB

関連する問題