SQL Server tiene una cosa llamada "estadísticas de columnas múltiples", pero no es lo que uno piensa que significaría.
Echemos un vistazo a la siguiente tabla de muestra:
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 eso, se están creando dos estadísticas en los dos índices que tenemos:
Estadísticas para 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 |
+--------------+------------+---------+---------------------+----------------+
Estadísticas para el índice agrupado:
+--------------+----------------+---------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
(He rellenado la tabla con datos de muestra aleatorios donde aproximadamente una décima parte de las filas no están archivadas. Luego ejecuté una actualización de estadísticas de exploración completa).
¿Por qué el histograma de las estadísticas de dos columnas solo usa una columna? Sé que muchas personas han escrito sobre el que se hace , pero ¿cuál es la razón? En este caso, hace que todo el histograma sea mucho menos útil, porque la primera columna solo tiene dos valores. ¿Por qué las estadísticas se restringirían arbitrariamente así?
Tenga en cuenta que esta pregunta no se refiere a histogramas multidimensionales, que son una bestia completamente diferente. Se trata de histogramas unidimensionales, siendo la dimensión única las tuplas que contienen las respectivas columnas múltiples.