2016-04-15 89 views
3

使用SSMS,我如何確定哪個查詢更高效?我更喜歡A,但我被告知子查詢在Transmission中每行都執行一次,因此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') 

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 

編輯:這是統計使用SET STATISTICS ON:

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. 

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子查詢,它只執行一次。 https://en.wikipedia.org/wiki/Correlated_subquery(感謝@destination_data的鏈接)

+0

第一步是不是總是涉及'EXPLAIN PLAN'? –

+0

我正在看執行計劃,但從數據中我不清楚哪一個更高效。 –

+0

'執行計劃/ STATISTICS IO'應該對你有所幫助 –

回答

0

一種方法來比較查詢在SSMS:

在SSMS,包括查詢一個標籤。選擇查詢菜單,然後選擇「包括客戶端統計」

註釋掉其中一個查詢,然後運行另一個查詢。選擇「客戶統計」標籤並查看統計。

現在註釋掉其他查詢,取消註釋第一個,然後再次運行。這兩個統計數據將顯示在客戶統計選項卡中,您可以輕鬆查看哪個更有效。