linq to sql 関数のクエリ速度に奇妙な矛盾があります。MVC アプリケーションから呼び出す関数があります。これは常に非常に遅く、7 秒程度です。SQL Management Studio から同じ関数を呼び出すと、遅い場合もあれば速い場合もあります (数分の 1 秒)。いつ遅くなるのか、いつ正確に速くなるのかはわかりませんが、一貫した結果が得られる 1 つのサイクル (MVC アプリケーションが常に遅いことを除く) を見つけました。
- クエリはアプリケーションで実行されます。これは遅いです。
- LINQ が実行するのとまったく同じようにクエリを実行します。これは の形式
sp_execute N' select [some] [select] [clauses] from functionname(@p0)', 'declare @p0 decimal(9,0)', @p0=123456789
です。これも、最初の実行時と連続した実行時に遅くなります。 - フォームで「ラップされていない」クエリを試します
select [some] [select] [clauses] from functionname(123456789)
。これは、連続実行でもまだ遅いです。 - 関数の変更 [...] で関数を再定義します。
- 元の sp_execute クエリの実行は依然として遅く、また censecutive の実行でも同様です。
- アンラップされた関数の実行は高速です。本当に速い。
- 元の sp_execute クエリの実行も非常に高速になりました。@p0 パラメータも異なります。
- クエリはアプリケーションで実行されます。ゆっくりに戻りました。
なぜこれが起こるのか、どうすればそれを改善できるのか、私は完全に完全に困惑しています. キャッシュされた実行計画などと関係があるように感じますが、何が起こっているのか、またはそれを修正する方法を正確に知るには十分ではありません. 誰が何が起こっているのか知っていますか?