2013-02-28 25 views
5

現在、ストアドプロシージャを実行するためにMicrosoft Enterprise Library Data Access 5.0を使用しています。SQLスクリプトの実行に時間がかかります

Database myDatabase = DatabaseFactory.CreateDatabase(); 
using (DbCommand command = myDatabase.GetStoredProcCommand("myStoredProc")) 
{ 
    //Add parameters here 
    using (IDataReader dataReader = myDatabase.ExecuteReader(command)) 
    { 
     while (dataReader.Read()) 
     { 
     } 
    } 
} 

すべて動作しますが、動作には時間がかかります。 SQLプロファイラをオンにすると、ストアドプロシージャの実行に約50秒かかることがわかります。しかし、Profilerから同じスクリプトを取り出してSQL Management Studioで実行すると、すべての行を返すのに約480ミリ秒かかります。

誰もこの問題に遭遇しましたか?なぜ大きな違いがありますか?

+0

whileループを削除すると変更されますか? – JeremyWeir

+0

私はそれを試してみる必要があります。 – madatanic

+0

この質問は、週に数回MSDN SQLフォーラムで出ます。ここでも重複している必要があります。私は正確な原因を忘れていますが、それは調整が必要なデフォルト設定です。 –

答えて

1

容易にParameter Sniffingになります。

+0

はい、それは別の考えられる原因です。その人が考えていたものではありません。 –

0

文字列パラメータのタイプをDbType.AnsiStringに変更して、それが役立つかどうかを確認してください。
データベース列がvarchar(...)でインデックスがあり、その列に一致するパラメータがnvarchar(...)の場合、SQL Serverはインデックスを無視してテーブルスキャンを実行することがあります。 解決方法は、SQL Serverがインデックスを使用するようにパラメータにAnsiStringを入力することです。

関連する問題