SQL Server 2012: как индекс хранилища столбцов может предоставлять несколько столбцов одновременно? - PullRequest
2 голосов
/ 18 марта 2012

Допустим, у нас есть следующая таблица:

CREATE TABLE T (
 ID INT,
 String1 nvarchar(400),
 String2 nvarchar(400)
)

И запрос:

select String1, String2, count(*)
from T
group by String1, String2

Если T был проиндексирован с помощью индекса хранилища столбцов , этот запрос на группировку обычно будет выполняться при сканировании индекса не кластеризованного хранилища столбцов.

Если индекс хранилища столбцов хранит строки в формате столбец за столбцом, и каждый столбец сортируется индивидуально, как он может предоставить несколько столбцов для строки одновременно? Это кажется невозможным потому что отдельные столбцы сортируются в разных порядках сортировки. Я не могу придумать способа объединить отдельные столбцы обратно в полную строку, содержащую оба столбца (в этом примере String1, String2).

Как это работает внутри?

1 Ответ

2 голосов
/ 19 марта 2012

Каждый столбец хранится отдельно, поэтому система должна сделать несколько обращений к индексам столбцов (по одному на выбранный столбец), а затем внутренне объединить результаты вместе, чтобы получить окончательный результат запроса.Это все еще довольно эффективно, поскольку индексы хранилища столбцов значительно сокращают требуемый ввод-вывод, хотя большое количество запрашиваемых столбцов может быть медленным.

...