SQL Server ha una cosa chiamata "statistiche multi-colonna", ma non è ciò che si pensa significherebbe.
Diamo un'occhiata alla seguente tabella di esempio:
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);
Con ciò, due statistiche vengono create sui due indici che abbiamo:
Statistiche per 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 |
+--------------+------------+---------+---------------------+----------------+
Statistiche per indice cluster:
+--------------+----------------+---------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
(Ho popolato la tabella con dati di esempio casuali in cui circa un decimo delle righe non sono archiviate. Successivamente ho eseguito un aggiornamento completo delle statistiche di scansione.)
Perché l'istogramma delle statistiche a due colonne utilizza solo una colonna? So che molte persone hanno scritto che fa , ma qual è la logica? In questo caso, rende l'intero istogramma molto meno utile, poiché la prima colonna ha sempre solo due valori. Perché le statistiche dovrebbero essere arbitrariamente limitate in questo modo?
Si noti che questa domanda non si riferisce agli istogrammi multidimensionali, che sono una bestia completamente diversa. Si tratta di istogrammi monodimensionali con la singola dimensione che sono le tuple contenenti le rispettive colonne multiple.