Mit SSMS, wie kann ich feststellen, welche Abfrage effizienter ist? Ich bevorzuge A, aber mir wird gesagt, dass die Unterabfrage für jede Zeile in Transmission einmal ausgeführt wird, und daher wird B bevorzugt.Wie ermittelt man, welche Abfrage in SSMS 2014 effizienter ist?
A
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: Dies ist die Statistik aus der Verwendung SET STATISTISCHE 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.
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.
Also, soweit ich das beurteilen kann, gibt es keinen Unterschied in der Effizienz.
EDIT 2: So bekomme ich es jetzt: Da die Unterabfrage keine correlated
Unterabfrage ist, wird sie nur einmal ausgeführt. https://en.wikipedia.org/wiki/Correlated_subquery (Danke an @destination_data für den Link.)
Bezieht sich der erste Schritt nicht immer auf EXPLAIN PLAN? –
Ich schaue mir den Ausführungsplan an, aber mir ist aus den Daten nicht klar, welcher effizienter ist. –
'Execution Plan/STATISTICS IO' sollte Ihnen helfen –