.NETからSQL Serverのsp_executesqlストアドプロシージャへの呼び出しを実行しているORMを使用しています。.NETのコードからSQLクエリが遅いが、対話的ではない
ストアドプロシージャが.NETから呼び出されると、タイムアウト例外が発生します。
プロファイラを見ると、実際にはクエリの実行に長時間かかることがわかります。
クエリは、本質的である:
exec sp_executesql N'SELECT DISTINCT
FROM [OurDatabase].[dbo].[Contract] [LPLA_1]) [LPA_L1]
LEFT JOIN [OurDatabase].[dbo].[Customer] [LPA_L2] ON [LPA_L2].[Customer_ID]=[LPA_L1].[CustomerId] AND [LPA_L2].[Data]=[LPA_L1].[Data])
WHERE ((((([LPA_L1].[DealerId] = @DealerId1))
AND ([LPA_L2].[Last_Name] = @LastName2))))',N'@DealerId1 varchar(18),@LastName2 varchar(25)',@DealerId1='1234',@LastName2='SMITH'
私にとって紛らわしい部分はこれです:私はコピーして、SQL管理スタジオにタイムアウトのクエリを貼り付け、対話的にそれを実行した場合、それがうまく実行されます。
.NETコードを使用して実行した場合、同じクエリで時間が大幅に長くかかる理由は誰にも分かりますか? (私はこれを再現することができます。コードから一貫してタイムアウトしたクエリは、一貫して対話的に実行されます。ありがとう!
返信するデータの行数はいくつですか?数千、数千の線がある場合、結果を期待してコンピュータにワイヤを押し込むのに時間がかかる可能性があります。 – Miles
クエリで多くのデータが返されますか?インタラクティブモードでは発生しない、プログラムケースに関係するサーバとクライアントとの間で送信されるデータはありますか? – quosoo
3つのテストケース。さらに、DealerIDとLast_Nameにはインデックスがあります。 –