Справочник по оператору логического и физического шоуплана

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Операторы описывают, как SQL Server выполняет запрос или инструкцию языка обработки данных (DML). Оптимизатор запросов использует операторы для построения плана запроса, чтобы создать результат, заданный в запросе, или произвести операцию, указанную в инструкции DML. План запроса — это дерево физических операторов. План запроса можно просмотреть с помощью SET SHOWPLAN инструкций, параметров графического плана выполнения в СРЕДЕ SQL Server Management Studio или событий шоуплана расширенных событий.

Операторы классифицируются как логические и физические.

Логические операторы

Логические операторы описывают операции реляционной алгебры, используемые для обработки инструкции. Другими словами, логические операторы описывают на концептуальном уровне, какие действия следует совершить.

Физические операторы

Физические операторы реализуют действия, описанные логическими операторами. Каждый физический оператор является объектом или процедурой, выполняющей операцию. Например, некоторые физические операторы обращаются к столбцам и строкам таблицы, индекса или представления. Другие физические операторы выполняют такие операции, как вычисления, агрегаты, проверки целостности данных или соединения. Физическим операторам соответствует их стоимость.

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

  • Open()Open(): метод приводит к инициализации физического оператора и настройке всех необходимых структур данных. Хотя физический оператор может принимать много Open() вызовов, обычно он получает только один.

  • GetRow()GetRow(): метод приводит к тому, что физический оператор получает первую или последующую строку данных. Физический оператор может получать ноль или много GetRow() вызовов.

  • Close()Close(): метод приводит к тому, что физический оператор выполняет некоторые операции очистки и завершает работу. Физический оператор получает только один Close() вызов, но Close() не всегда гарантируется.

Метод GetRow() возвращает одну строку данных, а количество вызовов отображается как ActualRows в выходных данных showplan, создаваемых графическим и XML-шоупланом. Дополнительные сведения об этих SET параметрах см. в разделе SET STATISTICS PROFILE (Transact-SQL) и SET STATISTICS XML (Transact-SQL).

Счетчики ActualRebinds и ActualRewinds, отображаемые в выходных данных showplan, ссылаются на количество вызовов Open() метода. Если оператор не находится на внутренней стороне соединения вложенных циклов, ActualRebinds равно одному, и ActualRewinds равно нулю. Если оператор находится на внутренней стороне соединения цикла, общее количество перестроек и перемоток должно совпадать с количеством строк, обработанных на внешней стороне соединения. Повторная привязка значит, что изменился один и более связанный параметр соединения, и внутреннюю часть нужно пересчитать. Перемотка означает, что ни один из коррелированных параметров не изменился, а предыдущий внутренний результирующий набор может использоваться повторно.

Фактическиеrebinds и ActualRewinds присутствуют в выходных данных xml-шоуплана, созданных с помощью SET STATISTICS XML ON и графического шоуплана. Они заполняются только для некластеризованных операторов индекса Spool, remote Query, Row Count Spool, Sort, Table Spool и Table-valued Function. Фактические значенияRebinds и ActualRewinds также могут быть заполнены для операторов Assert и Filter, если атрибут StartupExpression имеет значение TRUE.

Если фактическиеrebinds и ActualRewinds присутствуют в xml-шоуплане, они сравнимы с EstimateRebinds и EstimateRewinds. Если они отсутствуют, предполагаемое количество строк (EstimateRows) сравнимо с фактическим числом строк (ActualRows). Фактические графические выходные данные showplan отображают нули для фактических перевязок и фактических перемоток при отсутствии.

Связанный счетчик , ActualEndOfScans, доступен в XML и графическом шоуплане. Когда физический оператор достигает конца потока данных, этот счетчик увеличивается на один. Физический оператор может достигать конца своего потока данных ни одного, один или несколько раз. Как и при повторной привязке и перемотках, число проверок может быть более чем одним, только если оператор находится на внутренней стороне соединения цикла. Окончание сканирования должно быть меньше или равно сумме количества перебинированных и перемоток.

Сопоставление физических и логических операторов

Оптимизатор запросов создает план запроса в виде дерева логических операторов. После этого оптимизатор запросов выбирает наиболее эффективный физический оператор для каждого логического. Оптимизатор запросов использует подход на основе затрат, чтобы определить, какой физический оператор реализует логический оператор.

Обычно логическую операцию можно реализовать с помощью нескольких физических операторов. Однако в редких случаях физический оператор может реализовывать несколько логических операций.

выполнение в пакетном режиме.

Выполнение в пакетном режиме — это метод обработки запросов, используемый для обработки нескольких строк (следовательно , пакетного пакета), а не одной строки одновременно. Обработка в пакетном режиме использует алгоритмы, оптимизированные для многоядерных ЦП и увеличивая пропускную способность памяти на современном оборудовании. Пакетный режим можно использовать набором операторов для объектов rowstore и columnstore. Дополнительные сведения см . в руководстве по архитектуре обработки запросов.

Описания операторов

Этот раздел содержит описания логических и физических операторов. Свойства планов запросов и операторов можно просмотреть с помощью области свойств в представлении плана запросов SQL Server Management Studio (SSMS) и Azure Data Studio.

Совет

Каждый раз, когда значок графического плана выполнения имеет желтый круг с двумя стрелками справа налево, это означает, что оператор выполняется параллельно. Дополнительные сведения о параллелизме см. в статье Руководство по архитектуре потоков и задач.

Icon Оператор Showplan Description
Adaptive Join Оператор Adaptive Join позволяет отложить выбор метода хэш-соединения или соединения вложенными циклами до завершения сканирования первых входных данных.

Адаптивное соединение — это физический оператор. Дополнительные сведения см. в разделе Основные сведения об адаптивных соединениях.
Общая Оператор агрегата вычисляет выражение, содержащее MIN, MAXилиSUMCOUNTAVG.

Агрегат — это логический и физический оператор.
Arithmetic Expression Оператор Arithmetic Expression вычисляет новое значение на основе существующих значений в строке. Арифметическое выражение не используется в более новых версиях SQL Server.
Assert Оператор Assert проверяет условие. Например, этот оператор проверяет целостность ссылок или гарантирует, что скалярный вложенный запрос возвращает одну строку. Для каждой входной строки оператор Assert оценивает выражение в области свойств плана выполнения. Если это выражение оценивается NULL, строка передается через оператор Assert , и выполнение запроса продолжается. Если это выражение оценивается как ненулевое значение, возникает соответствующая ошибка.

Assert — это физический оператор.
Назначение Оператор Assign присваивает переменной значение выражения или константы.

Assign является элементом языка.
нет Async Concat Оператор Async Concat применяется только в удаленных запросах (распределенных запросах). Он имеет n дочерних узлов и один родительский узел. Обычно некоторые дочерние узлы являются удаленными компьютерами, участвующими в распределенном запросе. Оператор Async ConcatOpen() выполняет вызовы одновременно ко всем дочерним узлам, а затем применяет к каждому битовую карту. Для каждого бита, который является элементом 1, Async Concat отправляет выходные строки на родительский узел по запросу.
Bitmap SQL Server использует оператор Bitmap для реализации фильтрации растровых карт в параллельных планах запросов. Фильтрация растровых карт ускоряет выполнение запроса, устраняя строки со значениями ключей, которые не могут создавать записи соединения перед передачей строк другим оператором, таким как оператор Parallelism . Фильтр по битовым картам использует компактное представление набора значений из таблицы, находящейся в одной части дерева операторов, для фильтрации строк из другой таблицы, находящейся в другой части дерева. Если сразу удалять ненужные строки в запросе, последующие операторы работают с меньшим количеством строк, тем самым повышая общую производительность. Оптимизатор определяет, достаточно ли избирательна битовая маска, чтобы быть полезной, и в каких операторах применить фильтр.

Bitmap является физическим оператором.
Bitmap Create Оператор создания растровых карт отображается в выходных данных showplan, где создаются растровые изображения.

Bitmap Create является логическим оператором.
нет Branch Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов. Все итераторы в рамках такой области могут обрабатываться параллельными потоками. Сами же области должны обрабатываться последовательно. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition.

Branch Repartition и Segment Repartition являются логическими операторами.
Broadcast УBroadcast один дочерний и n родительских узлов. Broadcast рассылает входные строки нескольким получателям по требованию. Каждый пользователь получает полный набор строк. Например, если все потребители являются сторонами хэш-соединения, то создаются n копий хэш-таблиц.
Создание хэша Указывает сборку хэш-таблицы пакетной службы для оптимизированного для памяти индекса columnstore.

Применимо только к SQL Server 2012 (11.x).
Clustered Index Delete Оператор clustered Index Delete удаляет строки из кластеризованного индекса, указанного в свойстве object , указанного в области свойств графического и XML-шоупланов. Если элемент SeekPredicate или Predicate присутствует, удаляются только те строки, которые удовлетворяют предикату.

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Clustered Index Delete — это физический оператор.
Clustered Index Insert Оператор "Вставка кластеризованного индекса" вставляет строки из входных данных в кластеризованный индекс, указанный в свойстве Object , указанном в области свойств графических и XML-шоупланов. Xml showplan включает свойства SetPredicate и ColumnReference , которые можно использовать для определения значения, для которого задан каждый столбец. Если в кластеризованном индексе insert нет дочерних элементов для вставки значений , то строка, вставленная из самого оператора Insert .

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Кластеризованная вставка индекса — это физический оператор.
Clustered Index Merge Оператор Clustered Index Merge применяет поток данных слияния к кластеризованному индексу. Оператор удаляет, обновляет или вставляет строки из кластеризованного индекса, указанного в свойстве Object , в области свойств графического и XML-шоуплана. Фактическая операция зависит от значения среды выполнения свойства ActionColumn .

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Clustered Index Merge является физическим.
Clustered Index Scan Оператор clustered Index Scan сканирует кластеризованный индекс, указанный в свойстве object , указанном в области свойств графических и XML-шоупланов. При наличии необязательного предиката возвращаются только те строки, которые удовлетворяют предикату. Если свойство Order в области свойств или XML showplan имеет значение True, обработчик запросов определил, что строки должны быть возвращены в том порядке, в котором кластеризованный индекс сортировал их. Если свойство "Упорядочено" имеет значение False, ядро СУБД сканирует индекс оптимальным способом без обязательной сортировки выходных данных.

Clustered Index Scan является логическим и физическим оператором.
Clustered Index Seek Оператор Clustered Index Seek использует поисковые возможности индексов для получения строк из кластеризованного индекса. Свойство Object , указанное в области свойств графического и XML-шоупланов, содержит имя используемого кластеризованного индекса. Метод SeekPredicate содержит предикат для поиска. Ядро СУБД использует индекс для обработки только тех строк, которые удовлетворяют SeekPredicate. Он также может включать свойство Предиката, где ядро СУБД оценивается по всем строкам, удовлетворяющим SeekPredicate, но это необязательно и не использует индексы для выполнения этого процесса.

Если свойство Order в области свойств или XML showplan имеет значение True, обработчик запросов определил, что строки должны быть возвращены в том порядке, в котором кластеризованный индекс сортировал их. Если свойство "Упорядочено" имеет значение False, ядро СУБД выполняет поиск индекса оптимальным способом без обязательной сортировки выходных данных. Требование сохранения порядка выходных данных может быть менее эффективным, чем создание неортированных выходных данных.

Clustered Index Seek — это логический и физический оператор.
Clustered Index Update Оператор clustered Index Update обновляет входные строки в кластеризованном индексе, указанном в свойстве object , указанном в области свойств графических и XML-шоупланов. Если свойство Predicate присутствует, обновляются только те строки, которые удовлетворяют этому предикату. Если свойство SetPredicate присутствует, для каждого обновленного столбца задано это значение. Если свойство DefineValue присутствует, указаны значения, которые определяет этот оператор. Эти значения могут ссылаться в предложении SET или в другом месте этого оператора и в другом месте в этом запросе.

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Clustered Index Update является логическим и физическим оператором.
Свернуть Оператор Collapse оптимизирует процедуру обновления. При выполнении она может быть разбита (оператором Split ) на операции удаления и вставки. Область свойств содержит группу по предикату, указывающую список ключевых столбцов. Если обработчик запросов встречает смежные строки, которые удаляют и вставляют те же значения ключей, они заменяют эти отдельные операции одной, более эффективной операцией обновления.

Collapse является логическим и физическим оператором.
Удаление индекса Columnstore Оператор Columnstore Index Delete представляет удаление строк из индекса columnstore, указанного в свойстве Object , указанного в области свойств графического и XML-шоупланов. Удаление происходит с помощью кластеризованного удаления индекса columnstore и с помощью оператора Index Delete для некластеризованного индекса columnstore. Тип индекса (Clustered, NonClustered или ViewNonClustered) указывается в свойстве IndexKind в xml showplan. Метод SeekPredicate не поддерживается для удаления индекса Columnstore. Строки для удаления считываются из дочернего оператора.

Columnstore Index Delete — это физический оператор.
Вставка индекса Columnstore Оператор "Вставка индекса columnstore" представляет вставку строк из входных данных в индекс columnstore, указанный в свойстве Object , указанном в области свойств графических и XML-шоупланов. Вставка происходит с помощью вставки кластеризованного индекса columnstore и с помощью оператора insert index для некластеризованного индекса columnstore. Тип индекса (Clustered, NonClustered или ViewNonClustered) указывается в свойстве IndexKind в xml showplan. Xml showplan включает свойства SetPredicate и ColumnReference , которые можно использовать для определения значения, для которого задан каждый столбец.

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Вставка индекса Columnstore — это физический оператор.
Слияние индекса Columnstore Слияние индекса Columnstore представляет приложение потока данных слияния с помощью оператора слияния clustered Index Merge. Оператор удаляет, обновляет или вставляет строки из кластеризованного индекса columnstore, указанного в свойстве Object, указанного в области свойств графических и XML-шоупланов. Фактическая операция зависит от значения среды выполнения свойства ActionColumn .

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Слияние индекса Columnstore — это физический оператор.
Просмотр индекса columnstore Оператор проверки индекса Columnstore представляет проверку индекса columnstore, указанного в свойстве object , указанного в области свойств графических и XML-шоупланов. Проверка выполняется с помощью сканирования кластеризованного индекса columnstore и с помощью оператора сканирования индекса индекса, некластеризованного индекса columnstore. Тип индекса (Clustered, NonClustered или ViewNonClustered) указывается в свойстве IndexKind в xml showplan. При наличии необязательного предиката возвращаются только те строки, которые удовлетворяют предикату. Свойство SeekPredicate доступно только для секционированного индекса columnstore и только условий равенства или неравенства. Если секционированного столбца находится в предикате запроса, устранение секций может уменьшить количество групп строк для сканирования.

Columnstore Index Scan — это физический оператор.
Обновление индекса Columnstore Оператор обновления индекса Columnstore представляет обновление до одной или нескольких строк в индексе columnstore, указанном в свойстве Object , указанном в области свойств графических и XML-шоупланов. Обновления происходят через оператор обновления кластеризованного индекса для кластеризованного индекса columnstore и с помощью оператора обновления индекса для некластеризованного индекса columnstore. Тип индекса (Clustered, NonClustered или ViewNonClustered) указывается в свойстве IndexKind в xml showplan. Метод SeekPredicate не поддерживается для обновления индекса Columnstore. Обновляемые строки считываются из дочернего оператора. Если свойство SetPredicate присутствует, для каждого обновленного столбца задано это значение. Если свойство DefineValue присутствует, указаны значения, которые определяет этот оператор. Эти значения могут ссылаться в предложении SET или в другом месте этого оператора и в другом месте в этом запросе.

Примечание. Изменения кластеризованных индексов могут повлиять на некластеризованные индексы.

Обновление индекса Columnstore — это физический оператор.
Compute Scalar Оператор Compute Scalar вычисляет выражение и выдает вычисляемую скалярную величину. Затем это может быть возвращено пользователю, на который ссылается другой объект запроса или оба. Примерами одновременного использования этих возможностей являются предикаты фильтра или соединения.

Операторы вычислений Scalar, которые отображаются в showplans, созданных с помощью SET STATISTICS XML элемента RunTimeInformation, не могут содержаться. В графических шоу-планах фактические строки, фактические привязки и фактические перемотки могут отсутствовать в окне свойств при выборе параметра "Включить фактический план выполнения" в SQL Server Management Studio. Когда это происходит, это означает, что хотя эти операторы использовались в скомпилированном плане запроса, их работа выполнялась другими операторами в плане запросов среды выполнения. Количество выполнений в выходных данных showplan, созданных на SET STATISTICS PROFILE основе суммы перевязок и перемоток в шоупланах, созданных с помощью SET STATISTICS XML.

Compute Scalar — это логический и физический оператор.
Concatenation Оператор Concatenation просматривает несколько входов, возвращая каждую просмотренную строку. Объединение обычно используется для реализации конструкции Transact-SQLUNION ALL. Физический оператор Concatenation имеет два или более входов и один выход. Он копирует строки из первого входного потока в выходной поток и повторяет эту операцию для каждого дополнительного входного потока.

Concatenation является как логическим, так и физическим оператором.
Условный (если и в то время) Условный оператор выполняет условную обработку на IF основе или WHILE цикла. Если и в то время являются элементами языка.
Constant Scan Оператор Constant Scan вводит в запрос одну или несколько константных строк. Оператор Compute Scalar часто используется после выполнения оператора Constant Scan . Он добавляет столбцы в строки, полученные в результате выполнения оператора Constant Scan . Константная проверка может создавать одну или несколько строк с нулевыми или несколькими столбцами.
Преобразовать Оператор Convert автоматически преобразует скалярные данные из одного типа в другой.

Convert является элементом языка.
Cross Join Оператор Cross Join соединяет каждую строку из первого (верхнего) входного параметра с каждой строкой второго (нижнего) входного параметра.

Cross Join является логическим оператором.
Курсор Логический и физический операторы Cursor предназначены для описания того, каким образом выполняются операции запроса или обновления с участием курсора. Физические операторы описывают алгоритм физической реализации обработки курсора, например использование курсора, управляемого набором ключей. Каждый шаг выполнения курсора соответствует физическому оператору. Логические операторы описывают свойства курсора, например доступность курсора только для чтения.

Логические операторы включают асинхронные, оптимистичные, первичные, только для чтения, блокировки прокрутки, вторичные и синхронные.

Физические операторы включают динамический, запрос получения, набор ключей, запрос на заполнение, обновление запроса и моментальный снимок.
Declare Оператор Declare выделяет локальную переменную в плане запроса.

Declare является элементом языка.
Удаление Оператор Delete удаляет строки (из объекта), удовлетворяющие необязательному предикату в области свойств .
Deleted Scan В триггерах оператор удаленного сканирования сканирует удаленную таблицу.
нет Distinct Оператор Distinct удаляет дубликаты из набора строк или из коллекции значений.

Distinct является логическим оператором.
нет Distinct Sort Логический оператор Distinct Sort сканирует входные данные, удаляя дубликаты и сортировку по столбцам, указанным в отдельном порядке по предикату области свойств .

Distinct Sort является логическим оператором.
Distribute Streams Оператор Distribute Streams используется только в параллельных планах запросов. Оператор Distribute Streams преобразует один входящий поток записей в несколько выходящих потоков. Содержимое записи и формат не изменяются. Каждая запись из входящего потока направляется в один из выходящих потоков. Данный оператор автоматически сохраняет в выходящих потоках относительный порядок входящих записей. Чтобы определить выходящий поток, в который попадет запись из входящего потока, обычно используется хэширование.

Если выходные данные секционированы, область свойств содержит предикат столбцов секционирования и столбцы секционирования.

ОператорDistribute Streams является логическим оператором.
динамически; В операторе Dynamic используется курсор, который отслеживает изменения, внесенные другими.
Eager Spool Оператор Eager Spool принимает весь ввод, сохраняя каждую строку в скрытый временный объект базы данных tempdb . Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода. Оператор Eager Spool выполняет построение своего буферного файла «жадным» способом: когда родительский оператор буфера запрашивает первую строку, оператор буферизации принимает все строки из своего входного оператора и сохраняет ее в буфер.

Eager Spool — логический оператор.
Fetch Query Оператор Fetch Query извлекает строки, если выборка выполняется в курсоре.
Фильтр Оператор фильтра сканирует входные данные, возвращая только те строки, которые удовлетворяют выражению фильтра (предикату), который отображается в области свойств .
нет Flow Distinct Оператор Flow Distinct сканирует входные данные, удаляя дубликаты. В то время как оператор Distinct использует все входные данные перед созданием каких-либо выходных данных, оператор Flow Distinct возвращает каждую строку, полученную из входных данных (если только эта строка не является дубликатом, в этом случае она отбрасывается).

Flow Distinct — это логический оператор.
Проверка ссылок на внешние ключи Оператор проверки ссылок на внешний ключ выполняет проверки целостности ссылок, сравнивая измененную строку со строками в таблицах ссылок, чтобы убедиться, что изменение не нарушает целостность ссылок. Оператор Проверка ссылок на внешние ключи используется в том случае, если существует более 253 ссылок на один и тот же первичный или уникальный ключ.

Проверка ссылок на внешние ключи является логическим и физическим оператором.
Full Outer Join Логический оператор Full Outer Join возвращает каждую строку, удовлетворяющую предикату соединения из первого (верхнего) входа и соединенную с каждой строкой из второго (нижнего) входа. Он также возвращает строки из:

— первый вход, который не имел совпадений во втором входе.

— Второй вход, не соответствующий первому входу.

Входные данные, не содержащие соответствующие значения, возвращаются в качестве значения NULL.

Full Outer Join является логическим оператором.
Gather Streams Оператор Gather Streams используется только в планах параллельных запросов. Оператор Gather Streams считывает несколько входных потоков и создает один выходной поток записей, комбинируя все входные потоки. Содержимое записи и формат не изменяются. Если этот оператор сохраняет порядок, все входные потоки должны быть упорядочены. Если выходные данные упорядочены, область свойств содержит порядок по предикату и имена упорядоченных столбцов.

Gather Streams — логический оператор.
Hash Match Оператор Hash Match строит хэш-таблицу при помощи вычисления хэш-значения для каждой строки из своих входных данных. Хэш-предикат с списком столбцов, используемых для создания хэш-значения, отображается в области свойств. Затем для каждой тестовой строки (если возможно) он вычисляет хэш-значение (с использованием той же хэш-функции) и осуществляет поиск совпадений по хэш-таблице. Если остаточный предикат присутствует (определяется RESIDUAL:() в области свойств ), этот предикат также должен быть удовлетворен для строк, которые должны считаться совпадением. Поведение зависит от выполняемой логической операции.

— Для любых соединений используйте первые (верхние) входные данные для сборки хэш-таблицы и второго (нижнего) ввода для проверки хэш-таблицы. Выходные данные совпадают (или не совпадают) в зависимости от типа соединения. Если несколько операций соединения используют один и тот же столбец соединения, эти операции группируются в хэш-группу.

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

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

Hash Match является физическим оператором. Дополнительные сведения см. в разделе Основные сведения о хэш-соединениях.
Удаление индекса Оператор Index Delete удаляет строки из некластеризованного индекса, указанного в области свойств .

Index Delete — это физический оператор.
Index Insert Оператор "Вставка индекса" вставляет строки из входных данных в некластеризованный индекс, указанный в области свойств . В области свойств также содержится предикат набора, указывающий значение, для которого задан каждый столбец.

Index Insert является физическим оператором.
Index Scan Оператор сканирования индекса извлекает все строки из некластеризованного индекса, указанного в области свойств . Если необязательный элемент, где предикат отображается в области свойств , возвращаются только те строки, которые удовлетворяют предикату.

Index Scan является логическим и физическим оператором.
Index Seek Оператор Index Seek использует возможности поиска по индексам для получения строк из некластеризованного индекса. Область свойств содержит имя используемого некластеризованного индекса. Он также содержит предикат поиска . Ядро СУБД использует индекс для обработки только тех строк, которые удовлетворяют предикату поиска. При необходимости он может включать в себя предикат, который ядро СУБД оценивается по всем строкам, удовлетворяющим предикату поиска (он не использует индексы для этого). Если область свойств содержит ORDERED предложение, обработчик запросов определил, что строки должны быть возвращены в порядке, в котором некластеризованный индекс сортировал их. ORDERED Если предложение отсутствует, ядро СУБД выполняет поиск индекса оптимальным способом (что не гарантирует сортировку выходных данных). Разрешение выходных данных сохранять порядок может быть менее эффективным, чем создание несортированных выходных данных.

Index Seek является логическим и физическим оператором.
Index Spool Оператор Индекса Spool содержит предикат поиска в области свойств . Оператор Index Spool сканирует входные строки, помещая каждую строку в скрытый файл буфера (хранимый в базе данных tempdb и существующий только в течение выполнения запроса), и создает для строк некластеризованный индекс. Это позволяет использовать возможность поиска индексов для вывода только тех строк, которые удовлетворяют предикату поиска . Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.

Индекс Spool — это физический оператор.
Обновление индекса Физический оператор Index Update обновляет строки из входных данных в некластеризованном индексе, указанном в области свойств . Если присутствует предикат набора, для каждого обновленного столбца задано это значение.

Обновление индекса — это физический оператор.
Inner Join Оператор inner Join возвращает каждую строку, которая удовлетворяет предикату соединения первого (верхнего) входного элемента со вторым (нижним) входным элементом.

Внутреннее соединение — это логический оператор.
Insert Оператор Insert вставляет каждую строку из входных данных в объект, указанный в области свойств . Соответствующим физическим оператором является Table Insert, Index Insertили Clustered Index Insert .

Insert — это логический оператор.
Inserted Scan В триггерах оператор вставленного сканирования сканирует вставленную таблицу.

Inserted Scan является логическим и физическим оператором.
Intrinsic Встроенный оператор вызывает внутреннюю функцию Transact-SQL.

Intrinsic является элементом языка.
Итератор Значок перехватчика итератора отображается, когда подходящий значок для итератора не найден логикой, которая создает графические шоу-планы. Значок catchall не обязательно указывает условие ошибки.
Key Lookup Оператор Key Lookup выполняет поиск закладок в таблице с кластеризованным индексом. Область свойств содержит имя кластеризованного индекса и ключ кластеризации, используемый для поиска строки в кластеризованном индексе. ОператорKey Lookup всегда сопровождается оператором Nested Loops . Если предложение WITH PREFETCH отображается в области свойств , обработчик запросов определил, что оптимально использовать асинхронную предварительную выборку (перед чтением) при поиске закладок в кластеризованном индексе.

Использование оператора Key Lookup в плане запроса указывает, что запрос может выиграть от настройки производительности. Например, производительность запроса можно повысить, добавив покрывающий индекс.
Keyset Оператор набора ключей использует курсор, который может видеть обновления, но не вставки, сделанные другими пользователями.
Элемент Language Значок перехвата элемента языка отображается, когда подходящий значок для итератора не может быть найден логикой, которая создает графические шоу-планы. Значок catchall не обязательно указывает условие ошибки.
Lazy Spool Логический оператор Lazy Spool сохраняет все строки входных данных в скрытом временном объекте, который хранится в базе данных tempdb . Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода. Оператор Lazy Spool производит отложенное построение своего буферного файла: каждый раз, когда родительский оператор буфера запрашивает строку, оператор буферизации получает строку из своего входного оператора и сохраняет ее в буфер, а не обрабатывает все строки сразу.

Ленивый Spool является логическим оператором.
нет Left Anti Semi Join Оператор левого полусоединения возвращает каждую строку из первых (верхних) входных данных, если вторая (нижняя) строка отсутствует. Если предикат соединения не существует в области свойств , каждая строка является соответствующей строкой.

Left Anti Semi Join является логическим оператором.
нет Left Outer Join Оператор "Левое внешнее соединение" возвращает каждую строку, которая удовлетворяет предикату соединения первого (верхнего) входного элемента со вторым (нижним) входным элементом. Он также возвращает все строки из первых входных данных, которые не имеют совпадающих строк во втором входе. Строки, не имеющие соответствия строкам во втором входе, возвращаются как значения NULL. Если предикат соединения не существует в области свойств , каждая строка является соответствующей строкой.

Left Outer Join является логическим оператором.
нет Left Semi Join Оператор "Левое полусоединение " возвращает каждую строку из первого (верхнего) входного значения при наличии соответствующей строки во втором (нижнем) входе. Если предикат соединения не существует в области свойств , каждая строка является соответствующей строкой.

Left Semi Join является логическим оператором.
Log Row Scan Оператор Log Row Scan просматривает журнал транзакций.

Log Row Scan является логическим и физическим оператором.
Merge Interval Оператор Merge Interval проводит слияние нескольких (возможно, пересекающихся) интервалов и возвращает минимальный, непересекающийся интервал, который затем используется для поиска записей индекса. Этот оператор обычно отображается перед одним или несколькими операторами вычислений скалярных вычислений через операторы константного сканирования , которые создают интервалы (представленные в виде столбцов в строке), которые этот оператор объединяет.

Merge Interval является логическим и физическим оператором.
Merge Join Оператор Merge Join выполняет внутреннее соединение, левое внешнее соединение, левое полусоединение, левое антиполусоединение, правое внешнее соединение, правое полусоединение, правое антиполусоединение, а также логические операции соединения.

В области "Свойства" оператор объединения слиянием содержит предикат слияния, если операция выполняет соединение "один ко многим" или предикат слияния "многие ко многим", если операция выполняет соединение "многие ко многим". Область свойств также содержит разделенный запятыми список столбцов, используемых для выполнения операции. Оператор Merge Join требует наличия двух входных значений, отсортированных в соответствующих столбцах, что можно сделать с помощью вставки явных операций сортировки в план запроса. Присоединение к слиянию особенно эффективно, если явное сортировка не требуется, например, если в базе данных есть подходящий индекс дерева B или порядок сортировки можно использовать для нескольких операций, таких как соединение слиянием и группирование с накопительным пакетом.

Merge Join является физическим. Дополнительные сведения см. в разделе Основные сведения о соединениях слиянием.
Nested Loops Оператор Nested Loops выполняет логические операции внутреннего соединения, левого внешнего соединения, левого полусоединения и антилевого полусоединения.

Соединения вложенных циклов выполняют поиск во внутренней таблице для каждой строки внешней таблицы, обычно с помощью индекса. На основании предполагаемых затрат обработчик запросов определяет, сортировать ли внешние входные данные, чтобы улучшить сосредоточенность поиска по индексу во внутренней таблице. Все строки, удовлетворяющие предикату (необязательно) в области свойств , возвращаются в соответствии с применимым действием на основе выполняемой логической операции. OPTIMIZED Если для атрибута задано значениеTrue, это означает, что используется оптимизированные вложенные циклы (или сортировка пакетной службы).

Nested Loops является физическим оператором. Дополнительные сведения см. в разделе Основные сведения о соединении вложенных циклов.
нет Online Index Insert Оператор "Вставка индекса в Сети" указывает, что операция индексирования (создание, изменение или удаление) выполняется в сети. То есть данные базовых таблиц по-прежнему доступны для пользователей во время операции с индексом.

Вставка индекса в Сети — это физический оператор.
Никакой Parallelism Оператор Parallelism (или итератор обмена) выполняет логические операции потоков распространения, сбора и повторного секционирования. Область свойств может содержать предикат столбцов секционирования с разделенным запятыми списком секционированных столбцов. Область свойств также может содержать порядок по предикату, перечисляя столбцы для сохранения порядка сортировки во время секционирования.

Примечание. Если запрос был скомпилирован как параллельный запрос, но во время выполнения он выполняется в качестве последовательного запроса, выходные данные showplan, созданные SET STATISTICS XML или с помощью параметра "Включить фактический план выполнения" в SQL Server Management Studio, не содержат RunTimeInformation элемент для оператора Parallelism . В SET STATISTICS PROFILE выходных данных фактические числа строк и фактическое количество выполнения отображают нули для оператора Parallelism . При возникновении любого условия оператор Parallelism использовался только во время компиляции запросов, а не в плане запроса среды выполнения. Иногда параллельные планы запросов выполняются последовательно, если на сервере выполняется высокая параллельная нагрузка.

Parallelism является физическим оператором. Дополнительные сведения об операторе Parallelism см. в разделе "Оператор параллелизма".
Parameter Table Scan Оператор Parameter Table Scan просматривает таблицу, переданную как параметр текущего запроса. Как правило, это используется для INSERT запросов в хранимой процедуре.

Parameter Table Scan является логическим и физическим оператором.
нет Partial Aggregate ОператорPartial Aggregate используется в параллельных планах. Она применяет функцию агрегирования как можно больше входных строк, чтобы запись на диск (известная как "разлив") не требуется. Hash Match — это единственный физический оператор (итератор), реализующий частичную статистическую обработку.

Partial Aggregate является логическим оператором.
Population Query Оператор Population Query заполняет рабочую таблицу курсора при его открытии.
Refresh Query Оператор Refresh Query выбирает текущие данные для строк из буфера выборки.
Remote Delete Оператор Remote Delete удаляет входные строки удаленного объекта.

Remote Delete является логическим и физическим оператором.
Remote Index Scan Оператор удаленного сканирования индексов сканирует удаленный индекс, указанный в области свойств .

Remote Index Scan является логическим и физическим оператором.
Remote Index Seek Оператор Remote Index Seek использует возможности поиска объекта удаленного индекса, чтобы получить строки. Область свойств содержит имя используемого удаленного индекса и предиката поиска .

Удаленный поиск индекса — это логический и физический оператор.
Remote Insert Оператор Remote Insert вставляет входные строки в удаленный объект.

Remote Insert является логическим и физическим оператором.
Remote Query Оператор Remote Query отправляет запрос удаленному источнику. Текст запроса, отправляемого на удаленный сервер, отображается в области свойств .

Remote Query является логическим и физическим оператором.
Remote Scan Оператор Remote Scan позволяет удаленно просматривать необходимые объекты. Имя удаленного объекта отображается в области свойств .

Remote Scan является логическим и физическим оператором.
Remote Update Оператор Remote Update обновляет входные строки удаленного объекта.

Remote Update является логическим и физическим оператором.
Repartition Streams Оператор Repartition Streams (или итератор обмена) собирает несколько потоков и создает несколько потоков записей. Содержимое записи и формат не изменяются. Если оптимизатор запросов использует фильтр по битовым картам, то число строк в выходном потоке сокращается. Каждая запись из входного потока помещается в один выходной поток. Если оператор настроен для сохранения порядка, то все входные потоки упорядочиваются и сливаются в несколько упорядоченных выходных потоков. Если выходные данные секционированы, область свойств содержит предикат столбцов секционирования и столбцы секционирования. Если выходные данные упорядочены, область свойств содержит порядок по предикату и упорядочению столбцов. Он используется только в параллельных планах запроса.

Repartition Streams — это логический оператор.
Результат Оператор Result представляет собой данные, возвращенные в конце плана запроса. Обычно это корневой элемент showplan.

Result является элементом языка.
RID Lookup ОператорRID Lookup осуществляет поиск закладки в куче при помощи заданного идентификатора строки. Область свойств содержит метку закладки, используемую для поиска строки в таблице, и имя таблицы, в которой находится строка. Подстановка NESTED LOOP JOINRID всегда сопровождается .

RID Lookup является физическим оператором. Дополнительные сведения о поисках закладок см. в разделе "Зафиксировать чтение" и "Поиск закладок".
нет Right Anti Semi Join Оператор справа от полусоединения выводит каждую строку из второго (нижнего) ввода, если соответствующая строка в первом (верхнем) входе не существует. Соответствующая строка определяется как строка, которая удовлетворяет предикату в области свойств (если предикат отсутствует, каждая строка является соответствующей строкой).

Right Anti Semi Join является логическим оператором.
нет Right Outer Join Оператор Right Outer Join возвращает каждую строку, которая удовлетворяет соединению второго (нижнего) входа с первым (верхним). Он также возвращает все строки из второго входного ввода, не соответствующие строки в первом входе, присоединенные к NULL. Если предикат соединения не существует в области свойств , каждая строка является соответствующей строкой.

Right Outer Join является логическим оператором.
нет Right Semi Join Оператор "Правое полусоединение " возвращает каждую строку из второго (нижнего) входного значения, если в первом (верхнем) входе есть соответствующая строка. Если предикат соединения не существует в области свойств , каждая строка является соответствующей строкой.

Right Semi Join является логическим оператором.
Row Count Spool Оператор Row Count Spool просматривает входные данные, подсчитывая число представленных строк и возвращая такое же количество строк, очищенных от данных. Этот оператор используется, если важно проверить наличие строк, а не данных, содержащихся в строках. Например, если оператор вложенных циклов выполняет операцию левого полусоединения и предикат соединения применяется к внутренним входным данным, то в верхней части внутреннего входного элемента оператора вложенных циклов может быть помещена строка счетчика строк. Затем оператор вложенных циклов может определить, сколько строк выводится с помощью пула счетчика строк (поскольку фактические данные из внутренней стороны не нужны), чтобы определить, следует ли возвращать внешнюю строку.

ОператорRow Count Spool — это физический оператор.
нет Segment Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов. Все итераторы в рамках такой области могут обрабатываться параллельными потоками. Сами же области должны обрабатываться последовательно. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition.

Branch Repartition и Segment Repartition являются логическими операторами.
Сегмент Оператор "Сегмент" делит входной набор на сегменты на основе значения одного или нескольких столбцов. Эти столбцы отображаются в виде аргументов оператора Segment . Затем оператор выводит по одному сегменту за раз.

Сегмент — это физический и логический оператор.
Проект последовательности Оператор Sequence Project добавляет столбцы для выполнения вычислений над упорядоченным набором. Он делит входной набор на сегменты в соответствии со значением одного или нескольких столбцов. Затем оператор выводит по одному сегменту за раз. Эти столбцы отображаются как аргументы оператора Sequence Project .

Sequence Project является логическим и физическим оператором.
Последовательность Оператор Sequence выполняет планы широкого обновления. Практически он выполняет каждый вход по очереди (сверху вниз). Каждый вход обычно является обновлением отдельного объекта. Он возвращает лишь строки, полученные из последнего (нижнего) входа.

Sequence является логическим и физическим оператором.
Моментальный снимок Оператор моментального снимка создает курсор, который не видит изменений, внесенных другими пользователями.
Сортировать Оператор Sort сортирует входящие строки. Область свойств содержит отдельный порядок по предикату, если дубликаты удаляются этой операцией, или порядок по предикату с разделенным запятыми списком отсортированных столбцов. Столбцы префиксируются со значением ASC , если столбцы отсортированы по возрастанию или значение DESC , если столбцы отсортированы в порядке убывания.

Sort — это логический и физический оператор.
Разделение Оператор Split используется для оптимизации процесса обновления. Он разбивает каждую операцию обновления на операции удаления и вставки.

ОператорSplit является логическим и физическим оператором.
Spool Оператор Spool сохраняет промежуточные результаты запроса в базе данных tempdb .
Статистическое выражение потока Оператор Stream Aggregate группирует строки в один или несколько столбцов и вычисляет одно или несколько агрегатных выражений, возвращенных запросом. Выход этого оператора может быть использован последующими операторами запроса, возвращен клиенту или то и другое. Оператору Stream Aggregate необходимы входные данные, упорядоченные по группируемым столбцам. Оптимизатор использует оператор сортировки перед этим оператором, если данные еще не отсортированы из-за предыдущего оператора сортировки или из-за упорядоченного поиска или сканирования индекса. SHOWPLAN_ALL В инструкции или графическом плане выполнения в SQL Server Management Studio столбцы группы по предикату перечислены в области свойств, а статистические выражения перечислены в столбце "Определенные значения".

Stream Aggregate является физическим оператором.
Switch ОператорSwitch представляет собой особый тип итератора объединения, который имеет n входов. Выражение связывается с каждым оператором Switch . В зависимости от возвращаемого значения выражения (между 0 и n-1) оператор Switch копирует соответствующий входной поток в выходной поток. В частности, оператор Switch применяется при реализации планов запроса, содержащих быстрые курсоры прямого направления с такими операторами, как TOP .

Коммутатор — это логический и физический оператор.
Table Delete Оператор "Удаление таблицы" удаляет строки из таблицы, указанной в области свойств плана выполнения запроса.

Table Delete — это физический оператор.
Table Insert Оператор "Вставка таблицы" вставляет строки из входных данных в таблицу, указанную в области свойств плана выполнения запроса. В области свойств также содержится предикат набора, указывающий значение, для которого задан каждый столбец. Если оператор Table Insert не имеет потомков для вставки значений, то вставленная строка берется из самого оператора вставки.

Table Insert является физическим оператором.
Table Merge Оператор Table Merge применяет поток данных слияния к куче. Оператор удаляет, обновляет или вставляет строки в таблицу, указанную в области свойств оператора. Фактическая операция, выполняемая, зависит от значения среды выполнения свойства ActionColumn

Table Merge является физическим оператором.
Table Scan Оператор сканирования таблиц извлекает все строки из таблицы, указанной в области свойств плана выполнения запроса. Если в области свойств отображается предикат, возвращаются только те строки, которые удовлетворяют предикату.

Table Scan является логическим и физическим оператором.
Table Spool Оператор Table Spool просматривает входную таблицу и помещает копию каждой строки в скрытую буферную таблицу, которая находится в базе данных tempdb и существует только в течение времени жизни запроса. Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.

Table Spool является физическим оператором.
Table Update Оператор обновления таблиц обновляет входные строки в таблице, указанной в области свойств плана выполнения запроса. Предикат набора определяет значение каждого обновленного столбца. Эти значения могут ссылаться в предложении SET или в другом месте этого оператора и в другом месте этого запроса.

Обновление таблицы — это физический оператор.
Table-valued Function Оператор функции с табличным значением оценивает табличное значение функции (Transact-SQL или CLR) и сохраняет полученные строки в базе данных tempdb. Когда родительские итераторы запрашивают строки, функция с табличным значением возвращает строки из tempdb.

Запросы, вызывающие функции с табличным значением, формируют планы запросов с итератором Table-valued Function . Функция с табличным значением может вычисляться с различными значениями параметров:

- Модуль чтения функции с табличным значением XML принимает большой двоичный объект XML как параметр и возвращает набор строк, представляющий узлы XML в том же порядке, что и в документе XML. Другие входные параметры могут ограничить узлы XML, возвращаемые в подмножество XML-документа.

- Модуль чтения функции с табличным значением XML с фильтром XPath — это специальный тип модуля чтения функции с табличным значением XML , ограничивающий результат узлами XML, соответствующими выражению XPath.

ОператорTable-valued Function — это логический и физический оператор.
Top Оператор Top просматривает входные данные и возвращает только указанное число или процент строк, выбранных, возможно, на основе порядка сортировки. Область свойств может содержать список столбцов, которые проверяются для связей. Планируется использовать оператор Top для соблюдения ограничений на число строк.

Top — это логический и физический оператор.
нет Top N Sort ОператорTop N Sort аналогичен итератору Sort за исключением того, что требуются только первые N строк, а не весь результирующий набор. Для небольших значений N подсистема выполнения запросов SQL Server пытается выполнить всю операцию сортировки в памяти. Для больших значений N подсистема выполнения запросов использует более универсальный метод сортировки, к которому N не является параметром.
UDX Расширенные операторы (UDX) реализуют одну из многих операций XQuery и XPath в SQL Server.

— Расширенный оператор (UDX) FOR XML используется для сериализации реляционной строки, которую он вводит в представление XML в одном столбце BLOB в одной выходной строке. Это оператор агрегирования XML с учетом порядка.

— расширенный оператор XML SERIALIZERэто оператор агрегирования XML с учетом порядка. Он получает на входе строки, представляющие XML-узлы или скаляры XQuery в порядке, соответствующем XML-документу, и выдает сериализованный XML BLOB в единственном XML-столбце единственной строки вывода.

— Расширенный оператор (UDX) XML FRAGMENT SERIALIZER — это специальный тип XML SERIALIZER, используемый для обработки входных строк, представляющих фрагменты XML, вставляемые в расширение изменения данных XQuery.

— Расширенный оператор (UDX) XQUERY STRING вычисляет строковое значение XQuery входных строк, представляющих XML-узлы. Это оператор агрегирования строки с учетом порядка. Он выводит одну строку со столбцами, представляющими скаляр XQuery, содержащий строковое значение входа.

— Расширенный оператор (UDX) XQUERY LIST DECOMPOSER — это оператор декомпозиции списка XQuery. Для каждой входной строки, представляющей XML-узел, она создает одну или несколько строк, представляющих скаляр XQuery, содержащий значение элемента списка, если входные данные имеют тип списка XSD.

— Расширенный оператор (UDX) XQUERY DATA оценивает функцию XQuery fn:data() для входных данных, представляющих XML-узлы. Это оператор агрегирования строки с учетом порядка. Он выводит одну строку со столбцами, представляющими скаляр XQuery, содержащий результат fn:data().

— Расширенный оператор XQUERY CONTAINS оценивает функцию XQuery fn:contains() для входных данных, представляющих XML-узлы. Это оператор агрегирования строки с учетом порядка. Он выводит одну строку со столбцами, представляющими скаляр XQuery, содержащий результат fn:contains().

— Расширенный оператор UPDATE XML NODE обновляет XML-узел в расширении изменения данных XQuery в методе modify() типа XML.

Операторы UDX являются логическими и физическими.
Union Оператор Union просматривает несколько входов, выводя каждую просмотренную строку и удаляя дубликаты.

Union — это логический оператор.
Update Оператор update обновляет каждую строку из входных данных в объекте, указанном в области свойств плана выполнения запроса.

Update является логическим оператором. Операторы Table Update, Index Updateили Clustered Index Updateявляются физическими.
Window Spool Оператор Window Spool расширяет каждую строку в набор строк, представляющий связанное с ним окно. В запросе OVER предложение определяет окно в результирующем наборе запросов, а затем функция окна вычисляет значение для каждой строки в окне.

Window Spool является логическим и физическим оператором.

Примечание.

В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.