SQL Server'ın "çok sütunlu istatistik" adı verilen bir şeyi vardır, ancak bunun ne anlama geleceğini düşünmez.
Aşağıdaki örnek tabloya bir göz atalım:
CREATE TABLE BadStatistics
(
IsArchived BIT NOT NULL,
Id INT NOT NULL IDENTITY PRIMARY KEY,
Mystery VARCHAR(200) NOT NULL
);
CREATE NONCLUSTERED INDEX BadIndex
ON BadStatistics (IsArchived, Mystery);
Bununla, sahip olduğumuz iki dizinde iki istatistik oluşturuluyor:
BadIndex için istatistikler:
+--------------+----------------+-------------------------+
| All density | Average Length | Columns |
+--------------+----------------+-------------------------+
| 0.5 | 1 | IsArchived |
+--------------+----------------+-------------------------+
| 4.149378E-06 | 37 | IsArchived, Mystery |
+--------------+----------------+-------------------------+
| 4.149378E-06 | 41 | IsArchived, Mystery, Id |
+--------------+----------------+-------------------------+
+--------------+------------+---------+---------------------+----------------+
| RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | DISTINCT_RANGE_ROWS | AVG_RANGE_ROWS |
+--------------+------------+---------+---------------------+----------------+
| 0 | 0 | 24398 | 0 | 1 |
+--------------+------------+---------+---------------------+----------------+
| 1 | 0 | 216602 | 0 | 1 |
+--------------+------------+---------+---------------------+----------------+
Kümelenmiş dizin için istatistikler:
+--------------+----------------+---------+
| All density | Average Length | Columns |
+--------------+----------------+---------+
| 4.149378E-06 | 4 | Id |
+--------------+----------------+---------+
+--------------+------------+---------+---------------------+----------------+
| RANGE_HI_KEY | RANGE_ROWS | EQ_ROWS | DISTINCT_RANGE_ROWS | AVG_RANGE_ROWS |
+--------------+------------+---------+---------------------+----------------+
| 1 | 0 | 1 | 0 | 1 |
+--------------+------------+---------+---------------------+----------------+
| 240999 | 240997 | 1 | 240997 | 1 |
+--------------+------------+---------+---------------------+----------------+
| 241000 | 0 | 1 | 0 | 1 |
+--------------+------------+---------+---------------------+----------------+
(Tabloyu, satırların onda birinin arşivlenmediği rastgele örnek verilerle doldurdum. Daha sonra tam bir tarama istatistikleri güncellemesi gerçekleştirdim.)
İki sütunlu istatistiklerin histogramı neden yalnızca bir sütun kullanıyor? Ben sayısız insanlar bu konuda yazdım biliyor mu , ama mantık nedir? Bu durumda, tüm histogramı çok daha az kullanışlı hale getirir, çünkü ilk sütun sadece iki değere sahiptir. İstatistikler neden bu şekilde keyfi olarak kısıtlanıyor?
Lütfen bu sorunun tamamen farklı bir canavar olan çok boyutlu histogramlardan bahsetmediğini unutmayın. Tek boyutlu histogramlar ile ilgilidir, tek boyut ilgili, birden çok sütunu içeren tuplelerdir.