1

.NET Entity Framework 3.5 によって生成された SQL ステートメントがあり (EF 3.5 では既に最適化されており、まもなく 4 にアップグレードされます)、2005 SQL Server で実行されます。一般的な SQL パフォーマンスについて説明している記事がたくさんあることは知っていますが、私の問題に対する具体的な解決策は見つかりませんでした。この状況の参照または解決策が必要です。ASP.NET アプリケーションには、特定の情報 (6 ~ 7 列など) を含むテーブルがあり、ユーザーがテーブルで並べ替え操作を実行すると、7 ~ 15 時間がかかります。情報を取得するのに数秒かかります(...アプリケーションは社内用であるため、これはパフォーマンスが低下します)。

記事から usp_Worst_TSQL を実行しました : http://www.databasejournal.com/features/mssql/article.php/3802936/Finding-the-Worst-Performing-T-SQL-Statements-on-an-Instance.htmパフォーマンスの問題の原因を突き止める: WHERE、INNER & LEFT JOIN、および ORDER BY 句を使用するネストされたクエリがいくつかあります。

ステートメント内の SQL ステートメント句に関するインデックスを作成する際の考慮事項は何ですか? また、いつ複合インデックスを作成する必要がありますか?

編集:私は問題がどこにあるかからアイデアを得ることができました。コードにこの LINQ と foreach ループがあり、データを取得するのに丸 3 秒かかります。

foreach (string status in searchObj.Statuses)
{
from f in tblFormsQO
where f.tblFormStatus.Count > 0 && f.tblFormStatus.Count(s => s.StatusDate == null) == 0
&& f.tblFormStatus.OrderByDescending(s => s.StatusDate).FirstOrDefault().CurrentStatus.CodeDesc == status
select f
}

ここで、f は大きなエンティティではありません (そして、そのすべてのプロパティが必要です)。パフォーマンスを向上させる方法はありますか?

4

1 に答える 1

1

その foreach ループは平均で何回繰り返されますか? 最初にデータをメモリにロードしてから、キャッシュされたデータで linq を使用すると、foreach が潜在的に生成する複数の sql ステートメントよりもはるかに高速になります。

それは問題の根本に対処するものではないかもしれませんが、私が見たものに基づいて私ができる提案にすぎません.

編集:

あなたの最初の質問は、インデックスに関する考慮事項に関係していました。送信されている実際のクエリが何であるかを調べてから、実行計画を生成するオプションをオンにして、SQL Management Studio でそれらを自分で実行します。そうすれば、クエリを高速化する可能性のあるインデックスの SQL から提案を得ることができます。

一般的なインデックスの追加に関する考慮事項については、データの挿入/削除の速度が心配な場合にのみ問題になります。インデックスが多いほど、これらの操作が遅くなります。それ以外の場合は、必要なすべてのインデックスを追加します。また、クラスター化されたインデックスがあることを確認してください。これにより、他のすべてのインデックスが高速化される可能性があります。

于 2012-12-20T11:19:33.557 に答える