1

MS SQL ServerのSQLクエリの実行プランに表示される「実行数」を減らす方法を知っている人はいますか?

1つの本番サーバーで実行速度が遅いクエリがあります(他のサーバーは問題ありません)。実行プランを確認すると、最初のステップの1つがクラスター化インデックススキャンであることがわかります。正常に動作しているサーバーでは、このスキャンは1回実行されます。動作が遅いものは4回実行されます。

ここ(http://www.sql-server-performance.com/tips/query_execution_plan_analysis_p2.aspx)を読んで、削減を試みる必要がありますが、これを行うためのヒントは見つかりません。

両方のサーバーは、同じバージョンのWindows(2003)とSQL Server(2000)を実行します。

どんな助けでもいただければ幸いです。

4

2 に答える 2

6

dbスキーマは本当に同じですか?その場合は、統計を更新し、インデックスとテーブルを最適化してみてください。

http://msdn.microsoft.com/en-us/library/aa260645(SQL.80).aspx

http://technet.microsoft.com/en-us/library/cc966523.aspx

于 2010-02-02T10:19:47.777 に答える
0

申し訳ありませんが、私はこれに自分で答えています。リンクをくれたArthurに感謝します、それらは役に立ちました(それで私はあなたの答えに賛成しました)。統計を更新しましたが、役に立ちませんでした。DBCC SHOWCONTIGを使用して最適化を確認しましたが、他のデータベースとそれほど違いはありませんでした。

クエリAdaTheDevを投稿しなかったことをお詫びしますが、すべての列などを変更する必要があります(これはかなりビジネスに不可欠なものであるため)。これで、解決策が見つかりました。

このテーブルには、他のデータベースよりもはるかに多くのレコードがあることに気付きました。正しい列にインデックスを追加しました。私たちは次のような参加をしました:

inner join table2 t2 on t1.t1Id = t2.t1Id and t2.someOtherId = @parameter
where t2.aThirdId = @otherParameter

そのため、Id列ごとに3つの個別のインデックスを追加し、30秒から3-5秒に高速化しました(ただし、t1IdとsomeOtherIdのインデックスは一緒にありました)。

最後に、多くのレコードが論理的に削除され、不要になったため、テーブルのクリーンアップも行いました。しかし、インデックスはうまくいきました。

于 2010-02-02T16:18:11.727 に答える