Yüksek yoğunluklu iki sütunun olduğu bir durum düşünüyorum ama bu sütunlar bağımsız değil.
Tanım
İşte test amacıyla oluşturduğum tablonun tanımı.
CREATE TABLE [dbo].[StatsTest](
[col1] [int] NOT NULL, --can take values 1 and 2 only
[col2] [int] NOT NULL, --can take integer values from 1 to 4 only
[col3] [int] NOT NULL, --integer. it has not relevance just to ensure that each row is different
[col4] AS ((10)*[col1]+[col2]) --a computed column ensuring that if two rows have different values in col1 or col2 have different values in col4
) ON [PRIMARY]
Veri
Deney verileri aşağıdaki gibidir
col1 col2 col3 col4
1 1 1 11
1 2 2 12
1 2 3 12
1 3 4 13
1 3 5 13
1 3 6 13
1 4 7 14
1 4 8 14
1 4 9 14
1 4 10 14
2 1 11 21
2 1 12 21
2 1 13 21
2 1 14 21
2 2 15 22
2 2 16 22
2 2 17 22
2 3 18 23
2 3 19 23
2 4 20 24
Adım 1: Col1'e göre filtreleme
SELECT * FROM StatsTest WHERE col1=1
Beklendiği gibi, Sorgu Optimize Edici tam satır sayısını tahmin eder.
Adım 2: Col2'ye göre filtreleme
SELECT * FROM StatsTest WHERE col2=1
Yine mükemmel bir tahminimiz var.
Adım 3: Col1 ve Col2'ye göre filtreleme
SELECT * FROM StatsTest WHERE col1=1 AND col2=1
Burada tahmin, gerçek satır sayısına yakın olmaktan çok uzaktır.
Sorun, sorgu çözümleyicisi implicity sorgusu col1 ve col2 bağımsız olduğunu varsayar ama değil.
Adım 4: Col4'e göre filtreleme
SELECT * FROM StatsTest WHERE col4 = 11
Süt4 hesaplanmış bir sütun ve şekline göre de tanımlanmıştır, çünkü Aşama 3'te terimi aynı sonuçları elde etmek için Süt4 = 11 tarafından filtre col1 = 1 ve col2 = 1 eşdeğerdir Süt4 = 11 Ancak burada, beklendiği gibi tahmin mükemmel.
Sonuç / Soru
Artificial Bu yapay ve yetersiz çözüm, bağımsız olmayan iki veya daha fazla sütunla filtreleme yaparken doğru tahminler elde etmek için mevcut tek seçenek midir? ¿Hesaplanan sütun ve hesaplanan sütuna göre filtre gerçek hassasiyet elde etmek için kesin olarak gerekli mi?
Örnek sqlfiddle