2017-09-08 14 views
-4

に私は私のストアドプロシージャ内の小さなクエリを持っている:使用している場合はSQL Serverの

case when t.status = 4 and (select top 1 nd.status from tableND 
where nd.Code= t.Code order by nd.ID desc)=4 
then 6 else t.status end) as status from tableTC t 

問題があまりにも遅い速度性能です。ですから、別のクエリに変更したいと思います。

どうすればいいですか?

+0

は、いくつかのサンプルデータを示し、それは、クエリが何をしているかをよりよく理解し、おそらく実行計画を与える:

SELECT内側ケースを避けるために、あなたがこのような何かを試すことができます(毎回繰り返されます) 。 t.codeにインデックスがありますか? – dbajtr

+0

とテーブルの構造の少しの説明 – Zeina

+0

とSQLSERVERのバージョン – etsa

答えて

0

私はテストを実行できませんでした(あなたはテーブル構造とサンプルデータを投稿しませんでした)。

CASE WHEN T.status=4 AND ND.STATUS=4 THEN 6 ELSE T.STATUS END AS STATUS 
FROM tableTC T 
LEFT JOIN (SELECT CODE, STATUS, ROW_NUMBER() OVER (PARTITION BY CODE ORDER BY ID DESC) AS RN FROM TABLED) ND ON T.CODE=ND.CODE AND ND.RN=1 
関連する問題