2016-04-15 16 views
3

SSMSでは、どのクエリがより効率的であるかをどのように判断できますか?私はAを好むが、サブクエリはTransmissionの各行に対して1回実行されると言われているので、Bが優先される。SSMSでどのクエリがより効率的かを判断する方法2014

Update t set t.transmission_status_id = 
(select transmission_status_id from transmission_status where code = 'TRANSLATED') 
from transmission t 
where t.transmission_status_id = 
(select transmission_status_id from transmission_status where code = 'RECEIVED') 

B

declare @transmission_status_TRANSLATED INT = (select transmission_status_id from transmission_status where code = 'TRANSLATED') 
declare @transmision_status_RECEIVED INT = (select transmission_status_id from transmission_status where code = 'RECEIVED') 

Update t set t.transmission_status_id = @transmission_status_TRANSLATED 
from transmission t 
where t.transmission_status_id = @transmision_status_RECEIVED 

EDIT:

A.

Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

Table 'transmission'. Scan count 1, logical reads 778, physical reads 0, 
read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

B

:これは、オンに設定統計を使用してからの統計であります
Table 'transmission'. Scan count 1, logical reads 778, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 
Table 'transmission_status'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

私が知る限り、効率に違いはありません。

編集2:サブクエリはcorrelatedサブクエリではないので、サブクエリは1回だけ実行されます。 https://en.wikipedia.org/wiki/Correlated_subquery(リンクの@destination_dataに感謝します)

+0

最初のステップには常に「EXPLAIN PLAN」が含まれていませんか? –

+0

私は実行計画を見ていますが、より効率的なデータから私にはわかりません。 –

+0

'Execution Plan/STATISTICS IO'はあなたに役立ちます –

答えて

2

実際の実行計画を調べる必要がありますが、それらは同一であると思われます。これらのサブクエリは相関関係がなく、エンジンがそのようなものを見るのはかなり良いので、一度だけ実行する必要があります。

本当に詳しい情報を知りたい場合は、この無料の電子書籍をGrant Fritcheyからチェックしてください。 https://www.red-gate.com/library/sql-server-execution-plans-2nd-edition

0

SSMSでクエリに比較する方法:SSMSに

は、単一タブの両方のクエリが含まれています。 [クエリ]メニューを選択し、[クライアントの統計情報を含める]を選択します。

クエリの1つをコメントアウトし、もう一方を実行します。 [クライアント統計]タブを選択し、統計を表示します。

もう一方のクエリをコメント化し、最初のコメントを外してもう一度実行します。どちらの統計も[クライアント統計]タブに表示され、どちらがより効率的かを簡単に確認できます。

関連する問題