В SQL Server есть нечто, называемое «статистикой по нескольким столбцам», но это не то, что, как думают, это будет означать.
Давайте посмотрим на следующую таблицу:
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);
При этом создаются две статистики по двум имеющимся у нас индексам:
Статистика для 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 |
+--------------+------------+---------+---------------------+----------------+
Статистика для кластерного индекса:
+--------------+----------------+---------+
| 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 |
+--------------+------------+---------+---------------------+----------------+
(Я заполнил таблицу случайными выборочными данными, где примерно десятая часть строк не заархивирована. После этого я запустил полное обновление статистики сканирования.)
Почему гистограмма статистики из двух столбцов использует только один столбец? Я знаю , что многие люди писали о том, что он делает , но то , что это объяснение? В этом случае это делает всю гистограмму намного менее полезной, потому что первый столбец имеет только два значения. Почему статистика так произвольно ограничена?
Обратите внимание, что этот вопрос не относится к многомерным гистограммам, которые являются совершенно другим зверем. Речь идет об одномерных гистограммах, причем одно измерение - это кортежи, содержащие соответствующие несколько столбцов.