Aşağıdaki sorguyu düşünün:
MERGE [Parameter] with (rowlock) AS target
USING (SELECT @AreaId, @ParameterTypeId, @Value)
AS source (AreaId, ParameterTypeId, Value)
ON (target.AreaId = source.AreaId AND
target.ParameterTypeId = source.ParameterTypeId)
WHEN MATCHED THEN
UPDATE SET target.Value = source.Value, @UpdatedId = target.Id
WHEN NOT MATCHED THEN
INSERT ([AreaId], [ParameterTypeId], [Value])
VALUES (source.AreaId, source.ParameterTypeId, source.Value);
İstatistik G / Ç aşağıdaki çıktıyı verir:
Tablo 'ParameterType'. Tarama sayısı 0, mantıksal okuma 2, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma öncesinde 0 okuma
. Tablo 'Alan'. Tarama sayısı 0, mantıksal okuma 2, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma öncesinde 0 okuma
. Tablo 'Parametre'. Tarama sayısı 1, mantıksal okumalar 4, fiziksel okumalar 0, ileri okumalar 0, lob mantıksal okumalar 0, lob fiziksel okumalar 0, lob okuma öncesi okumalar 0
Tablo 'Çalışma masası'. Tarama sayısı 1, mantıksal okuma 0, fiziksel okuma 0, okuma öncesi okuma 0, lob mantıksal okuma 0, lob fiziksel okuma 0, lob okuma öncesinde okuma 0.
Worktable, mesajlar sekmesinde görünür ve bu da bana tempdb tarafından kullanıldığını düşündürür MERGE.
Yürütme planında tempdb'ye ihtiyaç olduğunu belirten hiçbir şey görmüyorum
Her MERGEzaman tempdb kullanıyor mu?
BOL'de bu davranışı açıklayan bir şey var mı?
Bu durumda kullanmak INSERTve UPDATEdaha hızlı olur mu?
Ayrıldı

Sağ

İşte masa yapısı

tempdb. Gerçi tek bir satır için orada garip görünüyor. Cadılar Bayramı koruması için orada olabilir sanırım.