SQL Server hat eine Sache namens "mehrspaltige Statistik", aber es ist nicht das, was man denkt, dass es bedeuten würde.
Schauen wir uns die folgende Beispieltabelle an:
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);
Damit werden zwei Statistiken für die beiden Indizes erstellt, die wir haben:
Statistiken für BadIndex:
+--------------+----------------+-------------------------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
Statistiken für den Clustered-Index:
+--------------+----------------+---------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
(Ich habe die Tabelle mit zufälligen Stichprobendaten gefüllt, in denen etwa ein Zehntel der Zeilen nicht archiviert ist. Anschließend habe ich eine vollständige Aktualisierung der Scan-Statistiken durchgeführt.)
Warum verwendet das Histogramm der zweispaltigen Statistiken nur eine Spalte? Ich weiß , dass viele Menschen darüber geschrieben haben , dass es tut , aber was ist der Grund? In diesem Fall ist das gesamte Histogramm weniger nützlich, da die erste Spalte immer nur zwei Werte enthält. Warum sollten Statistiken so willkürlich eingeschränkt werden?
Bitte beachten Sie, dass sich diese Frage nicht auf mehrdimensionale Histogramme bezieht, die ein völlig anderes Tier sind. Es geht um eindimensionale Histogramme, wobei die einzelne Dimension die Tupel sind, die die jeweiligen, mehreren Spalten enthalten.