2017-10-09 12 views
-2

データベースにストアドプロシージャがあります。そのストアドプロシージャを呼び出すときには、時には1分かかり、時には10分かかりますが、それ以外の時間を要する場合もあります。この貧しいクエリやストアドプロシージャまたは多くの時間がかかるストアドプロシージャ

IF (EXISTS (SELECT 1 
      FROM table1 PWI (NOLOCK) 
      INNER JOIN table2 W (NOLOCK) ON PWI.ID = W.ID 
      WHERE W.Flag = 1 
       AND PWI.PatID IN (SELECT PatID FROM @table3) 
       AND W.SubID IN (SELECT SubID FROM @table4))) 

は、この問題を解決するのに役立ちますいくつかの他のサーバーの問題を再書き込みする必要がある場合

以下のステップだけでは、全体のプロセスに多くの時間を割いて、わからない

+4

実行計画を改善できますか? –

+2

まずはNOLOCKのヒントを取り除くべきです。彼らは時間の99.999%という素晴らしいアイデアではありません。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/ –

+3

テーブル定義(インデックスを含む)、実行計画、およその行数がすべてここで非常に役立ちます。 –

答えて

-2

テーブル変数は見積もり行= 1で、ループ結合でプランを作成します。使用の一時テーブルまたはOPTION(RECOMPILE)

+1

これは解答よりも多くのコメントです。そして、あなたがここで何を言おうとしているのかははっきりしていません。 –

+0

テーブル変数を#tempテーブルに変更すると問題が解決しました。今ではSPは19秒しか稼動していませんでした。以前は13分かかりました。 – vinoth

+0

あまり必要のないテーブル変数を使用しないでください:) –

0

ハートすべてのコードとDDLせずに指示するが、これはパフォーマンス

IF (EXISTS (SELECT 1 
FROM table1 PWI (NOLOCK) 
INNER JOIN table2 W (NOLOCK) ON PWI.ID = W.ID 
inner join @table3 on PWI.PatID = @table3.PatID 
inner join @table4 on W.SubID = @table4.SubID 
WHERE W.Flag = 1)) 
関連する問題