У 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 |
+--------------+------------+---------+---------------------+----------------+
(Я заповнив таблицю випадковими зразками даних, де приблизно десята частина рядків не є архівованими. Після цього я провів повне оновлення статистики сканування.)
Чому в гістограмі статистики двох стовпців використовується лише один стовпець? Я знаю, що численні люди писали про те, що це робить , але яка обгрунтування? У цьому випадку це робить всю гістограму набагато менш корисною, оскільки перший стовпець має лише два значення. Чому статистику можна довільно обмежувати таким чином?
Зверніть увагу, що це питання не стосується багатовимірних гістограм, які є зовсім іншим звіром. Йдеться про одновимірні гістограми, при цьому єдиний вимір є кортежами, що містять відповідні кілька колонок.