LEFT JOIN
'dan LEFT HASH JOIN
veya 'LEFT LOOP JOIN' öğelerine değişiklik yaparak 6 saniyeden 1 saniyeye kadar giden temel bir sorgum var. Herkes bunun neden bu kadar büyük bir performans artışına neden olacağını açıklayabilir mi ve SQL'in optimizerının neden kendi başına çözülmediğini açıklayabilir mi?Neden 'HASH JOIN' veya 'LOOP JOIN' bu saklanan progeyi iyileştiriyor?
SELECT
a.[ID]
FROM
[TableA] a
LEFT HASH JOIN
[TableB] b
ON b.[ID] = a.[TableB_ID]
JOIN
[TableC] c
ON c.[ID] = a.[TableC_ID]
WHERE
a.[SomeDate] IS NULL AND
a.[SomeStatus] IN ('X', 'Y', 'Z') AND
c.[SomethingElse] = 'ABC'
Tablo A ve B tüm kimlik alanları kayıtları ve endeksler milyonlarca vardır: İşte
gibi SQL benzediğini kabaca olduğunu. SQL Server kullanarak 2005.
Düzenleme: Bir collegue bir SOL LOOP JOIN önerdi ve bunun da hızlı ... SQL benim güçlü yönlerinden biri nasıl bu 'ipuçları' anlamaya çalışıyorum böyle olmadığını yapmış gibi görünüyor yardım ediyor. Satırların büyük yüzdesi sonuç kümesine katkıda bulunduğunda,
Planın ipucu uygulanmadan önce ve sonra gönderilmesini rica edebilir misiniz? Sadece 'GO SHOWPLAN_TEXT SET SEÇ'… ' – Quassnoi
Tüm ipuçlarını kaldırın ve ardından show fiili planıyla SSMS'de sorguyu çalıştırın, ardından planda Tahmini satır sayısını, tarama/arama işleçleri için gerçek satır sayısıyla karşılaştırın. plan. Plan, * tahmini * sayısına bağlı olarak üretilir, süre * gerçek * sayım tarafından sürülür. Tutarsızlıklar, kötü istatistikleri gösterir, ancak sıra dışı, tek değerler için iyi istatistiklerle de olabilir (örneğin, 1 Mil.lik satır 10 olan bir "SomeStatus"). –