SQL Server a une chose appelée "statistiques multi-colonnes", mais ce n'est pas ce que l'on pense que cela signifierait.
Jetons un coup d'œil à l'exemple de tableau suivant:
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);
Avec cela, deux statistiques sont en cours de création sur les deux index que nous avons:
Statistiques pour 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 |
+--------------+------------+---------+---------------------+----------------+
Statistiques pour l'index clusterisé:
+--------------+----------------+---------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
(J'ai rempli le tableau avec des échantillons de données aléatoires où environ un dixième des lignes ne sont pas archivées. J'ai ensuite exécuté une mise à jour complète des statistiques d'analyse.)
Pourquoi l'histogramme des statistiques à deux colonnes n'utilise-t-il qu'une seule colonne? Je sais que de nombreuses personnes ont écrit au sujet de ce qu'il fait , mais quelle est la raison d'être ? Dans ce cas, cela rend l'histogramme entier beaucoup moins utile, car la première colonne n'a que deux valeurs. Pourquoi les statistiques seraient-elles arbitrairement restreintes comme ça?
Veuillez noter que cette question ne fait pas référence aux histogrammes multidimensionnels, qui sont une bête entièrement différente. Il s'agit d'histogrammes unidimensionnels, la dimension unique étant les tuples contenant les multiples colonnes respectives.