Skip to content

Сканирование поколоночного индекса

Пересказ статьи Hugo Kornelis. Columnstore Index Scan


Введение


Columnstore Index Scan фактически не является оператором. Вы можете встретить его в графических планах выполнения SSMS (или других инструментов), но если вы посмотрите на лежащий в основе плана выполнения XML, то увидите, что это либо оператор Index Scan, либо Clustered Index Scan.
В настоящее время SQL Server поддерживает три типа хранения индексов: построчное, поколоночное и оптимизированное для памяти. Индексы каждого из этих типов могут быть представлены в Index Scan или Clustered Index Scan, на что указывает свойство Storage. Когда значением свойства Storage является RowStore или MemoryOptimized, то используется обычная иконка для сканирования (кластеризованного) индекса, но если значением является ColumnStore, то SSMS (и другие инструменты) выбирают для отображения уже другую иконку.

Хотя кластеризованный и некластеризованный индексы имеют свой собственный оператор для построчного хранения, эти типы объединяются под единой иконкой и названием оператора в SSMS. Визуально кластеризованный и некластеризованный индексы отличаются только текстом в круглых скобках после имени оператора (Clustered или Nonclustered), или в свойстве Logical Operation (Clustered Index Scan или Index Scan).

Визуальное представление в планах выполнения


В зависимости от используемого инструментария, оператор Index Scan или Clastered Index Scan при значении свойства Storage property равным ColumnStore отображается на графическом плане выполнения так:


SQL Server Management Studio (версия 17.4 и выше)


SQL Server Management Studio (до версии 17.3)


Azure Data Studio


Plan Explorer

Алгоритм


Columnstore Index Scan в действительности не является оператором, а просто визуальным индикатором того, что Index Scan или Clustered Index Scan обрабатывают поколоночный индекс. Обратитесь к соответствующим страницам за полным описанием алгоритмов этих операторов.

Свойства оператора


Нижеприведенные свойства, которые специфичны для оператора Columnstore Index Scan или же имеют специфичный смысл применительно к нему. Относительно всех других свойств обратитесь к "Общие свойства" . Свойства, которые находятся на странице общих свойств, но также включены ниже по причине специфики их смысла для оператора Columnstore Index Scan, отмечаются значком *.













Название свойстваОписание
Defined Values
(определенные значения)
*
Для Columnstore Index Scan это свойство перечисляет столбцы, прочитанные из индекса и возвращаемые в вызывающий оператор. Т.е. это то же самое, что и свойство Output List.
Estimated Number of Rows to be Read (оценка числа считываемых строк)Это оценка числа строк, которое будет прочитано оператором при сканировании индекса. В большинстве случаев оно будет равно оценке общего числа строк в таблице, за исключением случая, когда другие операторы плана выполнения могут привести к тому, что этот оператор больше не будет вызываться до достижения конца данных. Разница между этим свойством и свойством Estimated Number of Rows представляет число строк, которые по оценке должны быть прочитаны, но не будут возвращены в силу свойства Predicate.
Forced Index (навязанный индекс)Это свойство устанавливается в true, если использование этого индекса было навязано хинтом запроса.
ForceScan (навязанное сканирование)Это свойство устанавливается в true, если запрос использовал хинт FORCESCAN для принудительного использования оператора сканирования, даже если оптимизатор предпочел бы использовать оператор поиска.
ForceSeek (навязанный поиск)Это свойство устанавливается в true, если запрос использовал хинт FORCESEEK для принудительного использования оператора поиска, даже если оптимизатор предпочел бы использовать оператор сканирования. Следовательно, в операторе Columnstore Index Scan оно всегда ложно.
IndexKind (вид индекса)Представляет тип сканируемого кластеризованного индекса; для Columnstore Index Scan оно может быть либо NonClustered, либо Clustered. Замечу, что это свойство не отображается в списке SSMS, хотя тип индекса показывается в скобках под оператором. К свойству можно получить доступ в плане выполнения XML.
Logical Operation *Это Index Scan при сканировании некластеризованного поколоночного индекса или Clustered Index Scan при сканировании кластеризованного поколоночного индекса.
NoExpandHintЭто свойство устанавливается в true, если в запросе был использован хинт NOEXPAND для принуждения оптимизатора к использованию индексов на индексированном представлении.
ObjectЭто свойство перечисляет индекс, который сканируется оператором Columnstore Index Scan, используя именование из 4 частей (база, схема, таблица, индекс), и может иметь последующий табличный алиас.
OrderedЭто свойство всегда равно False для Columnstore Index Scan.
Physical OperationХотя в действительном представлении XML плана выполнения свойством Physical Operation является либо Index Scan, либо Clustered Index Scan, оно показывается как Columnstore Index Scan в SSMS.
Predicate (предикат)Если присутствует, это свойство определяет логическое выражение, которое должно применяться ко всем строкам, прочитанных оператором Clustered Index Scan. Возвращаются только те строки, для которых предикат оценивается как True. При возможности оператор Clustered Index Scan будет проталкивать этот предикат в движок хранилища, чтобы сделать возможным исключение строковых групп, что может уменьшить число выполненных операций ввода/вывода и сократить число сообщений между оператором и движком хранилища. Если предикат не способен устранить какие-либо строковые группы, тогда он не сократит число строк, обрабатываемых оператором. Разница между свойством Estimated Number of Rows и Estimated Number of Rows to be Read показывает сколько предполагается прочитать строк, но не вернуть. В отличие от других операторов сканирования Columnstore Index Scan не возвращает фактического значения свойства Number of Rows Read, поэтому если даже в план выполнения включена статистика реального времени, доступны только предварительные значения.
Storage (хранилище)Это свойство определяет тип индекса, который сканируется. Для Columnstore Index Scan это свойство всегда равно Columnstore.
Table Cardinality (кардинальное число таблицы)Это свойство показывает число строк в проиндексированной таблице на момент компиляции плана. Отметим, что это даже справедливо для фильтрованного индекса, и поэтому оно не может использоваться как показатель количества чтений строк, если Index Scan завершено. Вместо этого используйте свойство Estimated Number of Rows to be Read.


Неявные свойства


В таблице ниже перечислено поведение неявных свойств для оператора Columnstore Index Scan.






Название свойстваОписание
Batch Mode enabled (пакетный режим разрешен)Оператор Columnstore Index Scan поддерживает как построчный режим выполнения, так и пакетный.
Blocking (блокировка)Оператор Columnstore Index Scan является неблокирующим.
Memory requirement (потребность в памяти)Оператор Columnstore Index Scan не предъявляет каких-либо особых требований к памяти.
Order-preserving (сохранение порядка)Оператор Columnstore Index Scan возвращает данные в неопределенном порядке.
Поддержка параллелизмаКогда оператор Columnstore Index Scan выполняется в параллельной части плана выполнения, он использует метод “Parallel Page Supplier”, описанный здесь .
Segment aware (поддержка сегментов)Оператор Columnstore Index Scan не является поддерживающим сегменты.



Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.