ストアドプロシージャがEntityFrameworkから非常に遅く実行されるという興味深い問題を発見しました。私はすでに問題を解決しましたが、誰かが解決策が機能する理由を教えてくれるかどうか聞きたいです。
問題
タイプDATETIMEの@dateパラメーターを受け取るストアドプロシージャGetLoginCountがあります。このストアドプロシージャをデータベースで直接実行すると、1秒以内に実行されます。Entity Frameworkを介してアプリケーションを実行する場合、約45秒かかります。
ストアドプロシージャでWITHRECOMPILEを使用して、サーバーの実行プランをクリアして、正しいインデックスを使用していない実行プランの低速バージョンがキャッシュされていないことを確認しました。
2日間の実験の後、早送りすると、ストアドプロシージャの先頭に次のようにDECLARE @date1 DATETIME = @date
入力すると、代わりに@ date1を使用すると、同じくEntityFrameworkからストアドプロシージャが1秒で実行されることがわかりました。
なぜ?
私は自分の問題を解決しました。それはすべて問題ありませんが、この特定の解決策が機能する理由を知る必要があります。