Toplam operatör neden benzersiz dizin taramasından sonra kullanılır?


15

Null değeri olmayan değerler için filtre benzersiz bir dizin içeren bir tablo var. Sorgu planında farklı kullanımı vardır. Bunun bir sebebi var mı?

USE tempdb

CREATE TABLE T1( Id INT NOT NULL  IDENTITY PRIMARY KEY ,F1 INT , F2 INT )
go
CREATE UNIQUE NONCLUSTERED INDEX UK_T1 ON T1 (F1,F2) WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
GO
INSERT INTO  T1(f1,F2) VALUES(1,1),(1,2),(2,1)

SELECT DISTINCT   F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL 
SELECT  F1,F2 FROM T1 WHERE F1 IS NOT NULL AND F2 IS NOT NULL  

sorgu planı: resim açıklamasını buraya girin

Yanıtlar:


15

Bu bilinen bir SQL Server sorgu iyileştirici sınırlamasıdır. Microsoft'a bildirildi, ancak Bağlan öğesi (artık mevcut değil) kapatıldı Düzeltilmeyecek.

Filtrelenmiş Dizinlerle Optimize Edici Sınırlamaları hakkında yazdığımlar da dahil olmak üzere bu sınırlamanın ek sonuçları vardır , özet aşağıda belirtilmiştir:

Bu yayın, filtrelenmiş dizinlerle iki önemli optimize edici sınırlamasını vurgulamaktadır:

  • Filtrelenmiş dizinleri eşleştirmek için fazladan birleştirme tahminleri gerekli olabilir
  • Filtrelenen benzersiz dizinler, optimize ediciye benzersiz bilgi sağlamaz

Bazı durumlarda, her sorguya artık tahminleri eklemek pratik olabilir. Alternatif olarak, istenen zımni tahminleri birleştirilmiş olmayan bir görünümde kapsüllemektir. Optimize edici biraz daha iyi birleştirme birleştirme planını bulabilmesine rağmen, bu yayındaki karma maç planı varsayılan plandan çok daha iyiydi. Bazen, görünümü dizine NOEXPANDeklemeniz ve ipuçlarını kullanmanız gerekebilir (Standard Edition örnekleri için yine de gereklidir). Yine başka durumlarda, bu yaklaşımların hiçbiri uygun olmayacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.