Справочник по логическим и физическим операторам ShowplanShowplan Logical and Physical Operators Reference

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL AzureнетХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Операторы описывают, как SQL ServerSQL Server выполняет запрос или инструкцию языка DML.Operators describe how SQL ServerSQL Server executes a query or a Data Manipulation Language (DML) statement. Оптимизатор запросов использует операторы для построения плана запроса, чтобы создать результат, заданный в запросе, или произвести операцию, указанную в инструкции DML.The query optimizer uses operators to build a query plan to create the result specified in the query, or to perform the operation specified in the DML statement. План запроса — это дерево физических операторов.The query plan is a tree consisting of physical operators. Можно просмотреть план запроса с помощью инструкций SET SHOWPLAN, параметров графического плана выполнения в среде SQL Server Management StudioSQL Server Management Studioи классов событий SQL Server Profiler Showplan.You can view the query plan by using the SET SHOWPLAN statements, the graphical execution plan options in SQL Server Management StudioSQL Server Management Studio, or the SQL Server Profiler Showplan event classes.

Операторы классифицируются как логические и физические.Operators are classified as logical and physical operators.

Логические операторыLogical Operators
Логические операторы описывают операции реляционной алгебры, используемые для обработки инструкции.Logical operators describe the relational algebraic operation used to process a statement. Другими словами, логические операторы описывают на концептуальном уровне, какие действия следует совершить.In other words, logical operators describe conceptually what operation needs to be performed.

Физические операторыPhysical Operators
Физические операторы реализуют действия, описанные логическими операторами.Physical operators implement the operation described by logical operators. Каждый физический оператор является объектом или процедурой, выполняющей операцию.Each physical operator is an object or routine that performs an operation. Например, некоторые физические операторы обращаются к столбцам и строкам таблицы, индекса или представления.For example, some physical operators access columns or rows from a table, index or view. Другие физические операторы выполняют другие операции, такие как вычисления, статистическая обработка, проверка целостности данных или соединения.Other physical operators perform other operations such as calculations, aggregations, data integrity checks or joins. Физическим операторам соответствует их стоимость.Physical operators have costs associated with them.

Физические операторы производят инициализацию, собирают данные и закрываются.The physical operators initialize, collect data, and close. Если формулировать более конкретно, физический оператор может ответить на вызов трех следующих методов.Specifically, the physical operator can answer the following three method calls:

  • Init() : метод Init() заставляет физический оператор инициализировать себя и подготовить все необходимые структуры данных.Init(): The Init() method causes a physical operator to initialize itself and set up any required data structures. Физический оператор может получать много вызовов Init() , хотя обычно получает лишь один.The physical operator may receive many Init() calls, though typically a physical operator receives only one.

  • GetNext() : метод GetNext() заставляет физический оператор получить первую или последующую строку данных.GetNext(): The GetNext() method causes a physical operator to get the first, or subsequent row of data. Физический оператор может получить много вызовов GetNext() или не получить ни одного.The physical operator may receive zero or many GetNext() calls.

  • Close() : при вызове метода Close() физический оператор выполняет некоторые действия по очистке и закрывается.Close(): The Close() method causes a physical operator to perform some clean-up operations and shut itself down. Физический оператор получает только один вызов Close() .A physical operator only receives one Close() call.

Метод GetNext() возвращает одну строку данных, а число его вызовов отображается значением ActualRows в выводе инструкции Showplan, который формируется с использованием инструкций SET STATISTICS PROFILE ON или SET STATISTICS XML ON.The GetNext() method returns one row of data, and the number of times it is called appears as ActualRows in the Showplan output that is produced by using SET STATISTICS PROFILE ON or SET STATISTICS XML ON. Дополнительные сведения об этих параметрах SET см. в разделах SET STATISTICS PROFILE (Transact-SQL) и SET STATISTICS XML (Transact-SQL).For more information about these SET options, see SET STATISTICS PROFILE (Transact-SQL) and SET STATISTICS XML (Transact-SQL).

Счетчики ActualRebinds и ActualRewinds, которые появляются в выводе инструкции Showplan, указывают на число вызовов метода Init() .The ActualRebinds and ActualRewinds counts that appear in Showplan output refer to the number of times that the Init() method is called. Если оператор не находится внутри цикла соединения, ActualRebinds равняется одному, а ActualRewinds нулю.Unless an operator is on the inner side of a loop join, ActualRebinds equals one and ActualRewinds equals zero. Если оператор находится внутри цикла соединения, сумма числа повторных привязок и сбросов на начало должна равняться количеству строк, обработанных снаружи цикла.If an operator is on the inner side of a loop join, the sum of the number of rebinds and rewinds should equal the number of rows processed on the outer side of the join. Повторная привязка значит, что изменился один и более связанный параметр соединения, и внутреннюю часть нужно пересчитать.A rebind means that one or more of the correlated parameters of the join changed and the inner side must be reevaluated. Сброс на начало значит, что не изменился ни один из связанных параметров и можно вновь использовать прежний внутренний результирующий набор.A rewind means that none of the correlated parameters changed and the prior inner result set may be reused.

СчетчикиActualRebinds и ActualRewinds присутствуют в выводе инструкции Showplan в формате XML, который произведен с использованием инструкции SET STATISTICS XML ON.ActualRebinds and ActualRewinds are present in XML Showplan output produced by using SET STATISTICS XML ON. Они заполнены только для операторов Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spoolи Table-valued Function .They are only populated for the Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool, and Table-valued Function operators. СчетчикиActualRebinds и ActualRewinds могут быть заполнены также для операторов Assert и Filter , когда атрибут StartupExpression установлен в TRUE.ActualRebinds and ActualRewinds may also be populated for the Assert and Filter operators when the StartupExpression attribute is set to TRUE.

Когда счетчики ActualRebinds и ActualRewinds присутствуют в выводе инструкции Showplan в формате XML, их значения сравнимы со значениями EstimateRebinds и EstimateRewinds.When ActualRebinds and ActualRewinds are present in an XML Showplan, they are comparable to EstimateRebinds and EstimateRewinds. Когда они отсутствуют, оценочное число строк (EstimateRows) сравнимо с действительным числом строк (ActualRows).When they are absent, the estimated number of rows (EstimateRows) is comparable to the actual number of rows (ActualRows). Обратите внимание, что действительный графический вывод Showplan отображает нули для действительных повторных привязок и сбросов на начало, когда те отсутствуют.Note that actual graphical Showplan output displays zeros for the actual rebinds and actual rewinds when they are absent.

Связанный счетчик ActualEndOfScansдоступен только в том случае, когда вывод инструкции Showplan производится с помощью инструкции SET STATISTICS XML ON.A related counter, ActualEndOfScans, is available only when Showplan output is produced by using SET STATISTICS XML ON. Всякий раз, когда физический оператор достигает конца потока данных, этот счетчик увеличивается на единицу.Whenever a physical operator reaches the end of its data stream, this counter is incremented by one. Физический оператор может достигать конца своего потока данных ни одного, один или несколько раз.A physical operator can reach the end of its data stream zero, one, or multiple times. Как и в случае с повторными привязками и сбросами на начало, число окончаний просмотров может превышать единицу только в том случае, если оператор находится внутри цикла соединения.As with rebinds and rewinds, the number of end of scans can be more than one only if the operator is on the inner side of a loop join. Количество окончаний просмотров должно быть меньше или равно сумме количеств повторных привязок и сбросов на начало.The number of end of scans should be less than or equal to the sum of the number of rebinds and rewinds.

Сопоставление физических и логических операторовMapping Physical and Logical Operators

Оптимизатор запросов создает план запроса в виде дерева логических операторов.The query optimizer creates a query plan as a tree consisting of logical operators. После этого оптимизатор запросов выбирает наиболее эффективный физический оператор для каждого логического.After the query optimizer creates the plan, the query optimizer chooses the most efficient physical operator for each logical operator. Оптимизатор запросов использует подход, основанный на стоимости, чтобы определить, с помощью какого физического оператора будет реализован логический.The query optimizer uses a cost-based approach to determine which physical operator will implement a logical operator.

Обычно логическую операцию можно реализовать с помощью нескольких физических операторов.Usually, a logical operation can be implemented by multiple physical operators. Однако в редких случаях физический оператор может реализовывать несколько логических операций.However, in rare cases, a physical operator can implement multiple logical operations as well.

Описание оператораOperator Descriptions

Этот раздел содержит описания логических и физических операторов.This section contains descriptions of the logical and physical operators.

Значок графического плана выполненияGraphical Execution Plan Icon Оператор ShowplanShowplan Operator ОписаниеDescription
Значок оператора Adaptive JoinAdaptive Join operator icon Adaptive JoinAdaptive Join Оператор Adaptive Join позволяет отложить выбор метода хэш-соединения или соединения вложенными циклами до завершения сканирования первых входных данных.The Adaptive Join operator enables the choice of a hash join or nested loops join method to be deferred until the after the first input has been scanned. Оператор Adaptive Join является физическим.The Adaptive Join operator is a physical operator. Дополнительные сведения см. в разделе Основные сведения об адаптивных соединениях.For more information, see Understanding Adaptive joins.
NoneNone СтатистическоеAggregate Оператор Aggregate вычисляет выражения с функциями MIN, MAX, SUM, COUNT или AVG.The Aggregate operator calculates an expression containing MIN, MAX, SUM, COUNT or AVG. Оператор Aggregate может быть логическим или физическим.The Aggregate operator can be a logical operator or a physical operator.
Значок оператора Arithmetic ExpressionArithmetic expression operator icon Arithmetic ExpressionArithmetic Expression Оператор Arithmetic Expression вычисляет новое значение на основе существующих значений в строке.The Arithmetic Expression operator computes a new value from existing values in a row. Арифметическое выражение в SQL Server 2017SQL Server 2017не используется.Arithmetic Expression is not used in SQL Server 2017SQL Server 2017.
NoneNone Async ConcatAsync Concat Оператор Async Concat применяется только в удаленных запросах (распределенных запросах).The Async Concat operator is used only in remote queries (distributed queries). Он имеет n дочерних узлов и один родительский узел.It has n children and one parent node. Обычно некоторые дочерние узлы являются удаленными компьютерами, участвующими в распределенном запросе.Usually, some of the children are remote computers that participate in a distributed query. Оператор Async Concatopen() выполняет вызовы одновременно ко всем дочерним узлам, а затем применяет к каждому битовую карту.Async Concat issues open() calls to all of the children simultaneously and then applies a bitmap to each child. Для каждого бита, равного 1, оператор Async Concat по запросу отправляет выходные строки родительскому узлу.For each bit that is a 1, Async Concat sends the output rows to the parent node on demand.
Значок оператора AssertAssert operator icon AssertAssert Оператор Assert проверяет условие.The Assert operator verifies a condition. Например, этот оператор проверяет целостность ссылок или гарантирует, что скалярный вложенный запрос возвращает одну строку.For example, it validates referential integrity or ensures that a scalar subquery returns one row. Для каждой входной строки оператор Assert вычисляет выражение в столбце Аргумент плана выполнения.For each input row, the Assert operator evaluates the expression in the Argument column of the execution plan. Если значением этого выражения является NULL, строка передается через оператор Assert и выполнение запроса продолжается.If this expression evaluates to NULL, the row is passed through the Assert operator and the query execution continues. При значении этого выражения, отличном от NULL, будет выдана соответствующая ошибка.If this expression evaluates to a nonnull value, the appropriate error will be raised. Assert является физическим оператором.The Assert operator is a physical operator.
Значок элемента языка AssignAssign language element icon AssignAssign Оператор Assign присваивает переменной значение выражения или константы.The Assign operator assigns the value of an expression or a constant to a variable. Assign является элементом языка.Assign is a language element.
Значок оператора BitmapBitmap operator icon Bitmap CreateBitmap Create Оператор Bitmap Create появляется на выходе инструкции Showplan, в которой строятся битовые маски.The Bitmap Create operator appears in the Showplan output where bitmaps are built. Bitmap Create является логическим оператором.Bitmap Create is a logical operator.
Значок оператора BitmapBitmap operator icon BitmapBitmap SQL ServerSQL Server использует оператор Bitmap для реализации фильтрации по битовым картам в планах параллельных запросов.uses the Bitmap operator to implement bitmap filtering in parallel query plans. Фильтрация по битовым маскам повышает скорость выполнения запросов, исключая строки, которые не могут производить соединенные записи, до передачи строк другим операторам, например оператору Parallelism .Bitmap filtering speeds up query execution by eliminating rows with key values that cannot produce any join records before passing rows through another operator such as the Parallelism operator. Фильтр по битовым картам использует компактное представление набора значений из таблицы, находящейся в одной части дерева операторов, для фильтрации строк из другой таблицы, находящейся в другой части дерева.A bitmap filter uses a compact representation of a set of values from a table in one part of the operator tree to filter rows from a second table in another part of the tree. Если сразу удалять ненужные строки в запросе, последующие операторы работают с меньшим количеством строк, тем самым повышая общую производительность.By removing unnecessary rows early in the query, subsequent operators have fewer rows to work with, and the overall performance of the query improves. Оптимизатор определяет, достаточно ли избирательна битовая маска, чтобы быть полезной, и в каких операторах применить фильтр.The optimizer determines when a bitmap is selective enough to be useful and in which operators to apply the filter. Bitmap является физическим оператором.Bitmap is a physical operator.
Значок оператора Bookmark LookupBookmark lookup operator icon Bookmark LookupBookmark Lookup Оператор Bookmark Lookup производит поиск соответствующей строки в таблице или кластеризованном индексе по закладке (идентификатору строки или ключу кластеризации).The Bookmark Lookup operator uses a bookmark (row ID or clustering key) to look up the corresponding row in the table or clustered index. Столбец Argument содержит метку закладки, предназначенную для поиска строки в данной таблице или кластеризованном индексе.The Argument column contains the bookmark label used to look up the row in the table or clustered index. Столбец Argument содержит также имя таблицы или кластеризованного индекса, в которых производится поиск.The Argument column also contains the name of the table or clustered index in which the row is looked up. Если в столбце Argument присутствует предложение WITH PREFETCH, обработчик запросов определяет, что оптимальным решением при поиске закладки в таблице или кластеризованном индексе будет применение асинхронной упреждающей выборки (упреждающего чтения).If the WITH PREFETCH clause appears in the Argument column, the query processor has determined that it is optimal to use asynchronous prefetching (read-ahead) when looking up bookmarks in the table or clustered index.

Начиная с SQL Server 2005 (9.x)SQL Server 2005 (9.x) Bookmark Lookup не используется.Starting with SQL Server 2005 (9.x)SQL Server 2005 (9.x), Bookmark Lookup is not used. Вместо этого функцию поиска закладок обеспечивают операторы Key Lookup и RID Lookup.Instead, Key Lookup and RID Lookup provide bookmark lookup functionality.
NoneNone Branch RepartitionBranch Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов.In a parallel query plan, sometimes there are conceptual regions of iterators. Все итераторы в рамках такой области могут обрабатываться параллельными потоками.All of the iterators within such a region can be executed by parallel threads. Сами же области должны обрабатываться последовательно.The regions themselves must be executed serially. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition.Some of the Parallelism iterators within an individual region are called Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition.The Parallelism iterator at the boundary of two such regions is called Segment Repartition. Branch Repartition и Segment Repartition являются логическими операторами.Branch Repartition and Segment Repartition are logical operators.
NoneNone BroadcastBroadcast УBroadcast один дочерний и n родительских узлов.Broadcast has one child node and n parent nodes. Broadcast рассылает входные строки нескольким получателям по требованию.Broadcast sends its input rows to multiple consumers on demand. Каждый пользователь получает полный набор строк.Each consumer gets all of the rows. Например, если все получатели являются элементами хэш-соединения, то будет создано n копий хэш-таблиц.For example, if all of the consumers are build sides of a hash join, then n copies of the hash tables will be built.
Значок оператора Build HashBuild hash operator icon Создание хэшаBuild Hash Указывает сборку хэш-таблицы пакета для индекса columnstore, оптимизированного для памяти xVelocity.Indicates the build of a batch hash table for an xVelocity memory optimized columnstore index.
NoneNone CacheCache ОператорCache является специальной версией оператора Spool .Cache is a specialized version of the Spool operator. Он сохраняет только одну строку данных.It stores only one row of data. Cache является логическим оператором.Cache is a logical operator. ОператорCache не используется в SQL Server 2017SQL Server 2017.Cache is not used in SQL Server 2017SQL Server 2017.
Значок оператора Clustered Index DeleteClustered index delete operator icon Clustered Index DeleteClustered Index Delete Оператор Clustered Index Delete удаляет строки из кластеризованного индекса, заданного в столбце Argument плана выполнения запроса.The Clustered Index Delete operator deletes rows from the clustered index specified in the Argument column of the query execution plan. При наличии в столбце Argument предиката WHERE:() удаляются только строки, удовлетворяющие условиям предиката.Clustered Index Delete является физическим оператором.If a WHERE:() predicate is present in the Argument column, then only those rows that satisfy the predicate are deleted.Clustered Index Delete is a physical operator.
Значок оператора Clustered Index InsertClustered index insert operator icon Clustered Index InsertClustered Index Insert Оператор Clustered Index Delete инструкции Showplan вставляет строки со своего входа в кластеризованный индекс, указанный в столбце Argument.The Clustered Index Insert Showplan operator inserts rows from its input into the clustered index specified in the Argument column. В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца.The Argument column also contains a SET:() predicate, which indicates the value to which each column is set. Если оператор Clustered Index Insert не имеет потомков для вставки значений, то вставленная строка берется из самого оператора Insert .Clustered Index Insert является физическим оператором.If Clustered Index Insert has no children for insert values, the row inserted is taken from the Insert operator itself.Clustered Index Insert is a physical operator.
Оператор Clustered Index MergeClustered index merge operator Clustered Index MergeClustered Index Merge Оператор Clustered Index Merge применяет поток данных слияния к кластеризованному индексу.The Clustered Index Merge operator applies a merge data stream to a clustered index. Оператор удаляет, обновляет или вставляет строки из кластеризованного индекса, заданного в столбце оператора Аргумент .The operator deletes, updates, or inserts rows from the clustered index specified in the Argument column of the operator. Фактически выполненная операция зависит от значения столбца ACTION во время выполнения, указанного в столбце Argument оператора.The actual operation performed depends on the runtime value of the ACTION column specified in the Argument column of the operator. Clustered Index Merge является физическим.Clustered Index Merge is a physical operator.
Значок оператора Clustered Index ScanClustered index scan operator icon Clustered Index ScanClustered Index Scan Оператор Clustered Index Scan сканирует кластеризованный индекс, заданный в столбце Argument плана выполнения запроса.The Clustered Index Scan operator scans the clustered index specified in the Argument column of the query execution plan. При наличии необязательного предиката WHERE:() возвращаются только строки, удовлетворяющие предикату.When an optional WHERE:() predicate is present, only those rows that satisfy the predicate are returned. Если столбец Argument содержит предложение ORDERED, обработчик запросов требует, чтобы выходные данные строк были возвращены в порядке, в соответствии с которым они были отсортированы в кластеризованном индексе.If the Argument column contains the ORDERED clause, the query processor has requested that the output of the rows be returned in the order in which the clustered index has sorted it. Если предложение ORDERED отсутствует, подсистема хранилища выполняет поиск в индексе оптимальным способом, без обязательной сортировки выходных данных.If the ORDERED clause is not present, the storage engine scans the index in the optimal way, without necessarily sorting the output. Clustered Index Scan является логическим и физическим оператором.Clustered Index Scan is a logical and physical operator.
Значок оператора Clustered Index SeekClustered index seek operator icon Clustered Index SeekClustered Index Seek Оператор Clustered Index Seek использует поисковые возможности индексов для получения строк из кластеризованного индекса.The Clustered Index Seek operator uses the seeking ability of indexes to retrieve rows from a clustered index. Столбец Argument содержит имя используемого кластеризованного индекса и предикат SEEK:().The Argument column contains the name of the clustered index being used and the SEEK:() predicate. Подсистема хранилища использует этот индекс для обработки только тех строк, которые удовлетворяют данному предикату SEEK:().The storage engine uses the index to process only those rows that satisfy this SEEK:() predicate. Также может включаться предикат WHERE:(), в котором подсистема хранилища вычисляет выражение для всех строк, удовлетворяющих предикату SEEK:(), но это не является обязательным и не использует индексы для завершения процесса.It can also include a WHERE:() predicate where the storage engine evaluates against all rows that satisfy the SEEK:() predicate, but this is optional and does not use indexes to complete this process.

Если столбец Аргумент содержит предложение ORDERED, то обработчик запросов определил, что строки необходимо возвращать в том порядке, в котором их отсортировал кластеризованный индекс.If the Argument column contains the ORDERED clause, the query processor has determined that the rows must be returned in the order in which the clustered index has sorted them. Если предложение ORDERED отсутствует, подсистема хранилища выполняет поиск индекса оптимальным способом, без обязательной сортировки выходных данных.If the ORDERED clause is not present, the storage engine searches the index in the optimal way, without necessarily sorting the output. Сохранять порядок выходных данных является менее эффективным, чем формировать несортированные выходные данные.Allowing the output to retain its ordering can be less efficient than producing nonsorted output. При указании ключевого слова LOOKUP выполняется поиск закладок.When the keyword LOOKUP appears, then a bookmark lookup is being performed. В SQL Server 2008SQL Server 2008 и более поздних версиях оператор Key Lookup обеспечивает функцию поиска закладок.In SQL Server 2008SQL Server 2008 and later versions, the Key Lookup operator provides bookmark lookup functionality. Clustered Index Seek — это логический и физический оператор.Clustered Index Seek is a logical and physical operator.
Значок оператора Clustered Index UpdateClustered index update operator icon Clustered Index UpdateClustered Index Update Оператор Clustered Index Scan обновляет входные строки кластеризованного индекса, указанные в столбце Argument . При наличии в столбце предиката WHERE:() обновляются только строки, удовлетворяющие условиям предиката.The Clustered Index Update operator updates input rows in the clustered index specified in the Argument column.If a WHERE:() predicate is present, only those rows that satisfy this predicate are updated. При наличии предиката SET:() данное значение устанавливается для каждого обновляемого столбца.If a SET:() predicate is present, each updated column is set to this value. При наличии предиката DEFINE:() перечисляются значения, определенные данным оператором.If a DEFINE:() predicate is present, the values that this operator defines are listed. Ссылки на эти значения могут присутствовать в предложении SET или в любом месте внутри данного оператора либо внутри данного запроса.These values may be referenced in the SET clause or elsewhere within this operator and elsewhere within this query. Clustered Index Update является логическим и физическим оператором.Clustered Index Update is a logical and physical operator.
Значок оператора CollapseCollapse operator icon СвернутьCollapse Оператор Collapse оптимизирует процедуру обновления.The Collapse operator optimizes update processing. При выполнении она может быть разбита (оператором Split ) на операции удаления и вставки.When an update is performed, it can be split (using the Split operator) into a delete and an insert. Столбец Argument содержит предложение GROUP BY:(), указывающее список ключевых столбцов.The Argument column contains a GROUP BY:() clause that specifies a list of key columns. Если обработчик запросов встречает смежные строки, удаляющие и вставляющие одни и те же значения ключей, он заменяет эти отдельные операции на одну, более эффективную операцию обновления.If the query processor encounters adjacent rows that delete and insert the same key values, it replaces these separate operations with a single more efficient update operation. Collapse является логическим и физическим оператором.Collapse is a logical and physical operator.
Просмотр индекса columnstoreColumnstore Index Scan Просмотр индекса columnstoreColumnstore Index Scan Оператор Columnstore Index Scan просматривает индекс columnstore, заданный в столбце Argument плана выполнения запроса.The Columnstore Index Scan operator scans the columnstore index specified in the Argument column of the query execution plan.
Значок оператора Compute ScalarCompute scalar operator icon Compute ScalarCompute Scalar Оператор Compute Scalar вычисляет выражение и выдает вычисляемую скалярную величину.The Compute Scalar operator evaluates an expression to produce a computed scalar value. Затем эту величину можно вернуть пользователю или сослаться на нее в каком-либо запросе, а также выполнить эти действия одновременно.This may then be returned to the user, referenced elsewhere in the query, or both. Примерами одновременного использования этих возможностей являются предикаты фильтра или соединения.An example of both is in a filter predicate or join predicate. Compute Scalar — это логический и физический оператор.Compute Scalar is a logical and physical operator.

ОператорыCompute Scalar в инструкциях Showplan, сформированных с помощью XML SET STATISTICS, могут не содержать элемент RunTimeInformation .Compute Scalar operators that appear in Showplans generated by SET STATISTICS XML might not contain the RunTimeInformation element. (В графических инструкциях Showplan Фактическое число строк, Фактическое число повторных привязоки Фактическое число сбросов на начало могут отсутствовать в окне Свойства , если в среде выбран параметр Включить действительный план выполнения SQL Server Management StudioSQL Server Management Studio.)In graphical Showplans, Actual Rows, Actual Rebinds, and Actual Rewinds might be absent from the Properties window when the Include Actual Execution Plan option is selected in SQL Server Management StudioSQL Server Management Studio. В данном случае это означает, что хотя эти операторы были использованы в скомпилированном плане запроса, их работа выполнялась другими операторами в исполняемом плане запроса.When this occurs, it means that although these operators were used in the compiled query plan, their work was performed by other operators in the run-time query plan. Кроме того, обратите внимание, что число запусков на выходе Showplan, сформированных SET STATISTICS PROFILE, равно сумме повторных привязок и сбросов на начало в инструкциях Showplan, сформированных XML SET STATISTICS.Also note that the number of executes in Showplan output generated by SET STATISTICS PROFILE is equivalent to the sum of rebinds and rewinds in Showplans generated by SET STATISTICS XML.
Значок оператора ConcatenationConcatenation operator icon ConcatenationConcatenation Оператор Concatenation просматривает несколько входов, возвращая каждую просмотренную строку.The Concatenation operator scans multiple inputs, returning each row scanned. ОператорConcatenation обычно используется для реализации конструкции Transact-SQLTransact-SQL UNION ALL.Concatenation is typically used to implement the Transact-SQLTransact-SQL UNION ALL construct. Физический оператор Concatenation имеет два или более входов и один выход.The Concatenation physical operator has two or more inputs and one output. Он копирует строки из первого входного потока в выходной поток и повторяет эту операцию для каждого дополнительного входного потока.Concatenation copies rows from the first input stream to the output stream, then repeats this operation for each additional input stream. Concatenation является как логическим, так и физическим оператором.Concatenation is a logical and physical operator.
Значок оператора Constant ScanConstant scan operator icon Constant ScanConstant Scan Оператор Constant Scan вводит в запрос одну или несколько константных строк.The Constant Scan operator introduces one or more constant rows into a query. Оператор Compute Scalar часто используется после выполнения оператора Constant Scan . Он добавляет столбцы в строки, полученные в результате выполнения оператора Constant Scan .A Compute Scalar operator is often used after a Constant Scan to add columns to a row produced by the Constant Scan operator.
Значок элемента языка Convert (ядро СУБД)Convert (Database Engine) language element icon ПреобразоватьConvert Оператор Convert автоматически преобразует скалярные данные из одного типа в другой.The Convert operator converts one scalar data type to another. Convert является элементом языка.Convert is a language element.
NoneNone Cross JoinCross Join Оператор Cross Join соединяет каждую строку из первого (верхнего) входного параметра с каждой строкой второго (нижнего) входного параметра.The Cross Join operator joins each row from the first (top) input with each row from the second (bottom) input. Cross Join является логическим оператором.Cross Join is a logical operator.
NoneNone КурсорCursor Логический и физический операторы Cursor предназначены для описания того, каким образом выполняются операции запроса или обновления с участием курсора.The Cursor logical and physical operators are used to describe how a query or update involving cursor operations is executed. Физические операторы описывают алгоритм физической реализации обработки курсора, например использование курсора, управляемого набором ключей.The physical operators describe the physical implementation algorithm used to process the cursor; for example, using a keyset-driven cursor. Каждый шаг выполнения курсора соответствует физическому оператору.Each step in the execution of a cursor involves a physical operator. Логические операторы описывают свойства курсора, например доступность курсора только для чтения.The logical operators describe a property of the cursor, such as the cursor is read only.

Логические операторы включают в себя Asynchronous, Optimistic, Primary, Read Only, Scroll Locks, Secondary и Synchronous.Logical operators include Asynchronous, Optimistic, Primary, Read Only, Scroll Locks, and Secondary and Synchronous.

Физические операторы включают в себя Dynamic, Fetch Query, Keyset, Population Query, Refresh Query и Snapshot.Physical operators include Dynamic, Fetch Query, Keyset, Population Query, Refresh Query and Snapshot.
Значок оператора Cursor CatchallCursor catchall cursor operator icon catchallcatchall Общий значок отображается в тех случаях, когда с помощью логики, управляющей графическими планами визуализации, не удается найти подходящий значок для итератора.The catchall icon is displayed when a suitable icon for the iterator cannot be found by the logic that produces graphical showplans. Значок общего захвата не обязательно указывает на ошибку.The catchall icon does not necessarily indicate an error condition. Существует три общих значка захвата: синий (итераторы), оранжевый (курсоры) и зеленый (элементы языка Transact-SQLTransact-SQL ).There are three catchall icons: blue (for iterators), orange (for cursors), and green (for Transact-SQLTransact-SQL language elements).
Значок элемента языка DeclareDeclare language element icon DeclareDeclare Оператор Declare выделяет локальную переменную в плане запроса.The Declare operator allocates a local variable in the query plan. Declare является элементом языка.Declare is a language element.
Значок оператора Delete (ядро СУБД)Delete (Database Engine) operator icon УдалениеDelete Оператор Delete удаляет те строки из объекта, которые удовлетворяют необязательному предикату в столбце Argument .The Delete operator deletes from an object rows that satisfy the optional predicate in the Argument column.
Значок оператора Delete ScanDelete scan operator icon Deleted ScanDeleted Scan Оператор Deleted Scan просматривает удаленную таблицу в триггере.The Deleted Scan operator scans the deleted table within a trigger.
NoneNone Distinct SortDistinct Sort Логический оператор Distinct Sort просматривает входные данные, удаляя дубликаты и сортируя данные по столбцам, заданным в предикате DISTINCT ORDER BY:() столбца Argument .The Distinct Sort logical operator scans the input, removing duplicates and sorting by the columns specified in the DISTINCT ORDER BY:() predicate of the Argument column. Distinct Sort является логическим оператором.Distinct Sort is a logical operator.
NoneNone DistinctDistinct Оператор Distinct удаляет дубликаты из набора строк или из коллекции значений.The Distinct operator removes duplicates from a rowset or from a collection of values. Distinct является логическим оператором.Distinct is a logical operator.
Значок оператора параллелизма Distribute StreamsDistribute streams parallelism operator icon Distribute StreamsDistribute Streams Оператор Distribute Streams используется только в параллельных планах запросов.The Distribute Streams operator is used only in parallel query plans. Оператор Distribute Streams преобразует один входящий поток записей в несколько выходящих потоков.The Distribute Streams operator takes a single input stream of records and produces multiple output streams. Формат и содержимое записей не меняются.The record contents and format are not changed. Каждая запись из входящего потока направляется в один из выходящих потоков.Each record from the input stream appears in one of the output streams. Данный оператор автоматически сохраняет в выходящих потоках относительный порядок входящих записей.This operator automatically preserves the relative order of the input records in the output streams. Чтобы определить выходящий поток, в который попадет запись из входящего потока, обычно используется хэширование.Usually, hashing is used to decide to which output stream a particular input record belongs.

Если выход является секционированным, столбец Argument содержит предикат PARTITION COLUMNS:() и столбцы секционирования.If the output is partitioned, then the Argument column contains a PARTITION COLUMNS:() predicate and the partitioning columns. ОператорDistribute Streams является логическим оператором.Distribute Streams is a logical operator
Значок оператора Dynamic CursorDynamic cursor operator icon ДинамическийDynamic В операторе Dynamic используется курсор, который отслеживает изменения, внесенные другими.The Dynamic operator uses a cursor that can see all changes made by others.
Значок оператора Fetch Query CursorFetch query cursor operator icon Fetch QueryFetch Query Оператор Fetch Query извлекает строки, если выборка выполняется в курсоре.The Fetch Query operator retrieves rows when a fetch is issued against a cursor.
Значок оператора Filter (ядро СУБД)Filter (Database Engine) operator icon FilterFilter Оператор Filter просматривает входные данные и возвращает только те строки, которые удовлетворяют критерию фильтрации (предикату), представленному в столбце Argument .The Filter operator scans the input, returning only those rows that satisfy the filter expression (predicate) that appears in the Argument column.
NoneNone Flow DistinctFlow Distinct Логический оператор Flow Distinct просматривает входные данные и удаляет дубликаты.The Flow Distinct logical operator scans the input, removing duplicates. Оператор Distinct принимает на входе все данные, чтобы выдать выходные данные, тогда как оператор FlowDistinct возвращает строки по мере поступления (если строка не является дубликатом, так как в этом случае она не возвращается).Whereas the Distinct operator consumes all input before producing any output, the FlowDistinct operator returns each row as it is obtained from the input (unless that row is a duplicate, in which case it is discarded).
Значок оператора проверки ссылок на внешние ключиForeign key references check operator icon Проверка ссылок на внешние ключиForeign Key References Check Оператор Проверка ссылок на внешние ключи выполняет проверку целостности ссылок на месте путем сравнения измененной строки со строками из ссылающихся таблиц, чтобы убедиться, что изменение не нарушит целостность данных.The Foreign Key References Check operator performs referential integrity checks in place, by comparing the modified row to the rows in the referencing tables to verify that the modification will not break the referential integrity. Оператор Проверка ссылок на внешние ключи используется в том случае, если существует более 253 ссылок на один и тот же первичный или уникальный ключ.The Foreign Key References Check operator is used when more than 253 foreign key references exist on the same primary or unique key. Проверка ссылок на внешние ключи является логическим и физическим оператором.Foreign Key References Check is a logical and physical operator.
NoneNone Full Outer JoinFull Outer Join Логический оператор Full Outer Join возвращает каждую строку, удовлетворяющую предикату соединения из первого (верхнего) входа и соединенную с каждой строкой из второго (нижнего) входа.The Full Outer Join logical operator returns each row satisfying the join predicate from the first (top) input joined with each row from the second (bottom) input. Он также возвращает строки из:It also returns rows from:

первых входных данных, не имеющих соответствий во вторых входных данных;-The first input that had no matches in the second input.

вторых входных данных, не имеющих соответствий в первых входных данных.-The second input that had no matches in the first input.

Вход, не содержащий совпадающих значений, возвращается как значение NULL.The input that does not contain the matching values is returned as a null value. Full Outer Join является логическим оператором.Full Outer Join is a logical operator.
Значок оператора параллелизма Gather StreamsGather streams parallelism operator icon Gather StreamsGather Streams Оператор Gather Streams используется только в планах параллельных запросов.The Gather Streams operator is only used in parallel query plans. Оператор Gather Streams считывает несколько входных потоков и создает один выходной поток записей, комбинируя все входные потоки.The Gather Streams operator consumes several input streams and produces a single output stream of records by combining the input streams. Формат и содержимое записей не меняются.The record contents and format are not changed. Если этот оператор сохраняет порядок, все входные потоки должны быть упорядочены.If this operator is order preserving, all input streams must be ordered. В случае упорядоченного выхода в столбце Argument содержится предикат ORDER BY:(), а имена столбцов упорядочены.If the output is ordered, the Argument column contains an ORDER BY:() predicate and the names of columns being ordered. Gather Streams — логический оператор.Gather Streams is a logical operator.
Значок оператора Hash MatchHash match operator icon Hash MatchHash Match Оператор Hash Match строит хэш-таблицу при помощи вычисления хэш-значения для каждой строки из своих входных данных.The Hash Match operator builds a hash table by computing a hash value for each row from its build input. Предикат A HASH:() со списком столбцов, использованных для создания хэш-значения, отображается в столбце Argument .A HASH:() predicate with a list of columns used to create a hash value appears in the Argument column. Затем для каждой тестовой строки (если возможно) он вычисляет хэш-значение (с использованием той же хэш-функции) и осуществляет поиск совпадений по хэш-таблице.Then, for each probe row (as applicable), it computes a hash value (using the same hash function) and looks in the hash table for matches. При наличии остаточного предиката (определенного посредством предиката RESIDUAL:() в столбце Argument ) строки должны удовлетворять также и этому предикату, чтобы рассматриваться в качестве совпадающих.If a residual predicate is present (identified by RESIDUAL:() in the Argument column), that predicate must also be satisfied for rows to be considered a match. Поведение зависит от выполняемой логической операции.Behavior depends on the logical operation being performed:

Для любых соединений используйте первые (верхние) входные данные для формирования хэш-таблицы, а вторые (нижние) входные данные — для выполнения пробы хэш-таблицы.-For any joins, use the first (top) input to build the hash table and the second (bottom) input to probe the hash table. Выходные данные совпадают (или не совпадают) в зависимости от типа соединения.Output matches (or nonmatches) as dictated by the join type. Если несколько операций соединения используют один и тот же столбец соединения, эти операции группируются в хэш-группу.If multiple joins use the same join column, these operations are grouped into a hash team.

Для операторов Distinct и Aggregate используйте входные данные для формирования хэш-таблицы (удаляя повторяющиеся элементы и вычисляя любые статистические выражения).-For the distinct or aggregate operators, use the input to build the hash table (removing duplicates and computing any aggregate expressions). Когда хэш-таблица будет построена, просмотрите таблицу и выведите все записи.When the hash table is built, scan the table and output all entries.

Для оператора Union используйте первые входные данные для формирования хэш-таблицы (удаляя повторяющиеся элементы).-For the union operator, use the first input to build the hash table (removing duplicates). Используйте вторую входную строку (в которой не должно быть дубликатов) с целью тестирования хэш-таблицы, возвращения всех строк, не имеющих совпадений, затем просмотрите хэш-таблицу для возвращения всех записей.Use the second input (which must have no duplicates) to probe the hash table, returning all rows that have no matches, then scan the hash table and return all entries.
Hash Match является физическим оператором.Hash Match is a physical operator. Дополнительные сведения см. в разделе Основные сведения о хэш-соединениях.For more information, see Understanding Hash joins.
Значок элемента языка IfIf language element icon Если операторIf Оператор If выполняет условную обработку в зависимости от значения выражения.The If operator carries out conditional processing based on an expression. If является элементом языка.If is a language element.
NoneNone Inner JoinInner Join Логический оператор Inner Join возвращает каждую строку, которая удовлетворяет соединению первого (верхнего) входа со вторым (нижним).The Inner Join logical operator returns each row that satisfies the join of the first (top) input with the second (bottom) input.
Значок оператора Insert (ядро СУБД)Insert (Database Engine) operator icon InsertInsert Логический оператор Insert вставляет строки из входного потока в объект, заданный в столбце Argument .The Insert logical operator inserts each row from its input into the object specified in the Argument column. Соответствующим физическим оператором является Table Insert, Index Insertили Clustered Index Insert .The physical operator is either the Table Insert, Index Insert, or Clustered Index Insert operator.
Значок оператора Inserted ScanInserted scan operator icon Inserted ScanInserted Scan Оператор Inserted Scan просматривает таблицу inserted .The Inserted Scan operator scans the inserted table. Inserted Scan является логическим и физическим оператором.Inserted Scan is a logical and physical operator.
Значок элемента языка IntrinsicIntrinsic language element icon IntrinsicIntrinsic Оператор Intrinsic вызывает внутреннюю функцию Transact-SQLTransact-SQL .The Intrinsic operator invokes an internal Transact-SQLTransact-SQL function. Intrinsic является элементом языка.Intrinsic is a language element.
Значок оператора Iterator CatchallIterator catchall operator icon ИтераторIterator Общий значок Iterator отображается в тех случаях, когда с помощью логики, управляющей графическими планами Showplan, не удается найти подходящий значок для итератора.The Iterator catchall icon is displayed when a suitable icon for the iterator cannot be found by the logic that produces graphical Showplans. Значок общего захвата не обязательно указывает на ошибку.The catchall icon does not necessarily indicate an error condition. Существуют три общих значка: синий (итераторы), оранжевый (курсоры) и зеленый (конструкции языка Transact-SQLTransact-SQL ).There are three catchall icons: blue (for iterators), orange (for cursors), and green (for Transact-SQLTransact-SQL language constructs).
Значок оператора Bookmark LookupBookmark lookup operator icon Key LookupKey Lookup Оператор Key Lookup выполняет поиск закладок в таблице с кластеризованным индексом.The Key Lookup operator is a bookmark lookup on a table with a clustered index. Столбец Аргумент содержит имя кластеризованного индекса и ключ кластеризации, который используется для поиска строки в кластеризованном индексе.The Argument column contains the name of the clustered index and the clustering key used to look up the row in the clustered index. ОператорKey Lookup всегда сопровождается оператором Nested Loops .Key Lookup is always accompanied by a Nested Loops operator. Если в столбце Аргумент присутствует предложение WITH PREFETCH, обработчик запросов определяет, что оптимальным решением при поиске закладки в таблице или кластеризованном индексе будет применение асинхронной упреждающей выборки (упреждающего чтения).If the WITH PREFETCH clause appears in the Argument column, the query processor has determined that it is optimal to use asynchronous prefetching (read-ahead) when looking up bookmarks in the clustered index.

Использование оператора Key Lookup в плане запроса указывает, что запрос может выиграть от настройки производительности.The use of a Key Lookup operator in a query plan indicates that the query might benefit from performance tuning. Например, производительность запроса можно повысить, добавив покрывающий индекс.For example, query performance might be improved by adding a covering index.
Значок оператора Keyset CursorKeyset cursor operator icon KeysetKeyset Оператор Keyset использует курсор, для которого видимыми являются обновления, но не вставки, выполненные другими.The Keyset operator uses a cursor that can see updates, but not inserts made by others.
Значок элемента языка CatchallLanguage element catchall icon Элемент LanguageLanguage Element Общий значок Language Element отображается в тех случаях, когда с помощью логики, управляющей графическими планами Showplan, не удается найти подходящий значок для итератора.The Language Element catchall icon is displayed when a suitable icon for the iterator cannot be found by the logic that produces graphical Showplans. Значок общего захвата не обязательно указывает на ошибку.The catchall icon does not necessarily indicate an error condition. Существуют три общих значка: синий (итераторы), оранжевый (курсоры) и зеленый (конструкции языка Transact-SQLTransact-SQL ).There are three catchall icons: blue (for iterators), orange (for cursors), and green (for Transact-SQLTransact-SQL language constructs).
NoneNone Left Anti Semi JoinLeft Anti Semi Join Оператор Left Anti Semi Join возвращает каждую строку первого (верхнего) входа, для которой нет соответствующей строки во втором (нижнем) входе.The Left Anti Semi Join operator returns each row from the first (top) input when there is no matching row in the second (bottom) input. Если в столбце Argument предикат соединения отсутствует, каждая строка будет считаться подходящей.If no join predicate exists in the Argument column, each row is a matching row. Left Anti Semi Join является логическим оператором.Left Anti Semi Join is a logical operator.
NoneNone Left Outer JoinLeft Outer Join Оператор Left Outer Join возвращает строки, удовлетворяющие условию соединения первого (верхнего) входа со вторым (нижним) входом.The Left Outer Join operator returns each row that satisfies the join of the first (top) input with the second (bottom) input. Он также возвращает строки из первого входа, не имеющие соответствия строкам во втором входе.It also returns any rows from the first input that had no matching rows in the second input. Строки, не имеющие соответствия строкам во втором входе, возвращаются как значения NULL.The nonmatching rows in the second input are returned as null values. Если в столбце Argument предикат соединения отсутствует, каждая строка будет считаться подходящей.If no join predicate exists in the Argument column, each row is a matching row. Left Outer Join является логическим оператором.Left Outer Join is a logical operator.
NoneNone Left Semi JoinLeft Semi Join Оператор Left Semi Join возвращает каждую строку первого (верхнего) входа, для которой нет соответствующей строки во втором (нижнем) входе.The Left Semi Join operator returns each row from the first (top) input when there is a matching row in the second (bottom) input. Если в столбце Argument предикат соединения отсутствует, каждая строка будет считаться подходящей.If no join predicate exists in the Argument column, each row is a matching row. Left Semi Join является логическим оператором.Left Semi Join is a logical operator.
Значок оператора Log Row ScanLog row scan operator icon Log Row ScanLog Row Scan Оператор Log Row Scan просматривает журнал транзакций.The Log Row Scan operator scans the transaction log. Log Row Scan является логическим и физическим оператором.Log Row Scan is a logical and physical operator.
Значок оператора Merge IntervalMerge interval operator icon Merge IntervalMerge Interval Оператор Merge Interval проводит слияние нескольких (возможно, пересекающихся) интервалов и возвращает минимальный, непересекающийся интервал, который затем используется для поиска записей индекса.The Merge Interval operator merges multiple (potentially overlapping) intervals to produce minimal, nonoverlapping intervals that are then used to seek index entries. Этот оператор обычно проводит слияние интервалов (представленных в виде столбцов строки), сформированных при выполнении одного или нескольких операторов Compute Scalar над операторами Constant Scan .This operator typically appears above one or more Compute Scalar operators over Constant Scan operators, which construct the intervals (represented as columns in a row) that this operator merges. Merge Interval является логическим и физическим оператором.Merge Interval is a logical and physical operator.
Значок оператора Merge JoinMerge join operator icon Merge JoinMerge Join Оператор Merge Join выполняет внутреннее соединение, левое внешнее соединение, левое полусоединение, левое антиполусоединение, правое внешнее соединение, правое полусоединение, правое антиполусоединение, а также логические операции соединения.The Merge Join operator performs the inner join, left outer join, left semi join, left anti semi join, right outer join, right semi join, right anti semi join, and union logical operations.

В столбце Argument оператор Merge Join содержит предикат MERGE:(), если операция устанавливает соединение "один ко многим", или предикат MANY-TO-MANY MERGE:(), если операция устанавливает соединение "многие ко многим".In the Argument column, the Merge Join operator contains a MERGE:() predicate if the operation is performing a one-to-many join, or a MANY-TO-MANY MERGE:() predicate if the operation is performing a many-to-many join. Столбец Argument содержит также список столбцов, используемых для выполнения операции с разделителями-запятыми.The Argument column also includes a comma-separated list of columns used to perform the operation. Оператор Merge Join требует наличия двух входных значений, отсортированных в соответствующих столбцах, что можно сделать с помощью вставки явных операций сортировки в план запроса.The Merge Join operator requires two inputs sorted on their respective columns, possibly by inserting explicit sort operations into the query plan. Соединение слиянием особенно эффективно в случаях, когда явной сортировки не требуется, например, когда в базе данных имеется подходящий индекс сбалансированного дерева или когда порядок сортировки может использоваться для нескольких операций вроде соединения слиянием или группирования со сведением.Merge join is particularly effective if explicit sorting is not required, for example, if there is a suitable B-tree index in the database or if the sort order can be exploited for multiple operations, such as a merge join and grouping with roll up. Merge Join является физическим.Merge Join is a physical operator. Дополнительные сведения см. в разделе Основные сведения о соединениях слиянием.For more information, see Understanding Merge joins.
Значок оператора Nested LoopsNested loops operator icon Nested LoopsNested Loops Оператор Nested Loops выполняет логические операции внутреннего соединения, левого внешнего соединения, левого полусоединения и антилевого полусоединения.The Nested Loops operator performs the inner join, left outer join, left semi join, and left anti semi join logical operations. При соединениях вложенными циклами выполняется поиск во внутренней таблице каждой строки внешней таблицы, обычно с помощью индекса.Nested loops joins perform a search on the inner table for each row of the outer table, typically using an index. На основании предполагаемых затрат обработчик запросов определяет, сортировать ли внешние входные данные, чтобы улучшить сосредоточенность поиска по индексу во внутренней таблице.The query processor decides, based on anticipated costs, whether to sort the outer input in order to improve locality of the searches on the index over the inner input. Возвращается результат выполнения логической операции над любыми строками, удовлетворяющими необязательному предикату в столбце Argument .Any rows that satisfy the (optional) predicate in the Argument column are returned as applicable, based on the logical operation being performed. Если для атрибута OPTIMIZED задано значение True, это означает, что используются оптимизированные соединения вложенными циклами (или пакетная сортировка).When the OPTIMIZED attribute is set to True, it means that an Optimized Nested Loops (or Batch Sort) is used. Nested Loops является физическим оператором.Nested Loops is a physical operator. Дополнительные сведения см. в разделе Основные сведения о соединении вложенных циклов.For more information, see Understanding Nested Loops joins.
Значок оператора Nonclustered Index DeleteNonclustered index delete operator icon Nonclustered Index DeleteNonclustered Index Delete Оператор Nonclustered Index Delete удаляет входные строки из некластеризованного индекса, указанного в столбце Argument .The Nonclustered Index Delete operator deletes input rows from the nonclustered index specified in the Argument column. Nonclustered Index Delete является физическим оператором.Nonclustered Index Delete is a physical operator.
Значок оператора Nonclustered Index InsertNonclustered index insert operator icon Index InsertIndex Insert Оператор Index Insert вставляет строки из входного потока в некластеризованный индекс, заданный в столбце Argument .The Index Insert operator inserts rows from its input into the nonclustered index specified in the Argument column. В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца.The Argument column also contains a SET:() predicate, which indicates the value to which each column is set. Index Insert является физическим оператором.Index Insert is a physical operator.
Значок оператора Nonclustered Index ScanNonclustered index scan operator icon Index ScanIndex Scan Оператор Index Scan получает все записи некластеризованного индекса, указанного в столбце Argument .The Index Scan operator retrieves all rows from the nonclustered index specified in the Argument column. Если в столбце Argument присутствует необязательный предикат WHERE:(), то возвращаются только те строки, которые удовлетворяют условию, указанному в этом предикате.If an optional WHERE:() predicate appears in the Argument column, only those rows that satisfy the predicate are returned. Index Scan является логическим и физическим оператором.Index Scan is a logical and physical operator.
Значок оператора Nonclustered Index SeekNonclustered index seek operator icon Index SeekIndex Seek Оператор Index Seek использует возможности поиска по индексам для получения строк из некластеризованного индекса.The Index Seek operator uses the seeking ability of indexes to retrieve rows from a nonclustered index. Столбец Argument содержит имя используемого некластеризованного индекса.The Argument column contains the name of the nonclustered index being used. Он также содержит предикат SEEK:().It also contains the SEEK:() predicate. Подсистема хранилища использует этот индекс для обработки только строк, удовлетворяющих предикату SEEK:().The storage engine uses the index to process only those rows that satisfy the SEEK:() predicate. При необходимости может включаться предикат WHERE:(), в котором подсистема хранилища вычисляет выражение для всех строк, удовлетворяющих предикату SEEK:() (при этом не используются индексы).It optionally may include a WHERE:() predicate, which the storage engine will evaluate against all rows that satisfy the SEEK:() predicate (it does not use the indexes to do this). Если столбец Argument содержит предложение ORDERED, обработчик запросов определяет, что строки должны возвращаться в том порядке, в котором они отсортированы в некластеризованном индексе.If the Argument column contains the ORDERED clause, the query processor has determined that the rows must be returned in the order in which the nonclustered index has sorted them. Если предложение ORDERED отсутствует, подсистема хранилища производит поиск индекса оптимальным способом (что не гарантирует сортировки выходных данных).If the ORDERED clause is not present, the storage engine searches the index in the optimal way (which does not guarantee that the output will be sorted). Сохранение сортировки в выводе может оказаться менее эффективным, чем возврат неупорядоченного вывода.Allowing the output to retain its ordering may be less efficient than producing nonsorted output. Index Seek является логическим и физическим оператором.Index Seek is a logical and physical operator.
Значок оператора Nonclustered Index SpoolNonclustered index spool operator icon Index SpoolIndex Spool Физический оператор Index Spool содержит предикат SEEK:() в столбце Argument .The Index Spool physical operator contains a SEEK:() predicate in the Argument column. Оператор Index Spool сканирует входные строки, помещая каждую строку в скрытый файл буфера (хранимый в базе данных tempdb и существующий только в течение выполнения запроса), и создает для строк некластеризованный индекс.The Index Spool operator scans its input rows, placing a copy of each row in a hidden spool file (stored in the tempdb database and existing only for the lifetime of the query), and builds a nonclustered index on the rows. Это позволяет использовать поддерживаемый индексами механизм поиска для вывода только строк, отвечающих требованиям предиката SEEK:().This allows you to use the seeking capability of indexes to output only those rows that satisfy the SEEK:() predicate. Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.If the operator is rewound (for example, by a Nested Loops operator) but no rebinding is needed, the spooled data is used instead of rescanning the input.
Значок оператора Nonclustered Index UpdateNonclustered index update operator icon Nonclustered Index UpdateNonclustered Index Update Физический оператор Nonclustered Index Update обновляет строки, указанные во входных параметрах, в некластеризованном индексе, заданном в столбце Argument .The Nonclustered Index Update physical operator updates rows from its input in the nonclustered index specified in the Argument column. При наличии предиката SET:() данное значение устанавливается для каждого обновляемого столбца.If a SET:() predicate is present, each updated column is set to this value. Nonclustered Index Update является физическим оператором.Nonclustered Index Update is a physical operator.
Значок оператора Online Index InsertOnline index insert operator icon Online Index InsertOnline Index Insert Физический оператор Online Index Insert указывает, что операции создания, изменения и удаления индекса выполняются в сети.The Online Index Insert physical operator indicates that an index create, alter, or drop operation is performed online. То есть данные базовых таблиц по-прежнему доступны для пользователей во время операции с индексом.That is, the underlying table data remains available to users during the index operation.
NoneNone ParallelismParallelism Оператор Parallelism (или итератор обмена) выполняет логические операции потоков распространения, сбора и повторного секционирования.The Parallelism operator (or Exchange Iterator) performs the distribute streams, gather streams, and repartition streams logical operations. Столбцы Argument могут также содержать предикат PARTITION COLUMNS:() со списком секционируемых столбцов, разделенным запятыми.The Argument columns can contain a PARTITION COLUMNS:() predicate with a comma-separated list of the columns being partitioned. Столбцы Argument могут также содержать предикат ORDER BY:(), содержащий список столбцов для сохранения порядка сортировки во время секционирования.The Argument columns can also contain an ORDER BY:() predicate, listing the columns to preserve the sort order for during partitioning. Parallelism является физическим оператором.Parallelism is a physical operator. Дополнительные сведения об операторе Parallelism см. в серии публикаций в блоге Крейга Фридмана (Craig Freedman).For more information about the Parallelism operator, see Craig Freedman's blog series.

Примечание. Если запрос скомпилирован как параллельный, но во время выполнения запускается как последовательный, выходные данные Showplan, сформированные SET STATISTICS XML или с помощью параметра Включить действительный план выполнения в SQL Server Management StudioSQL Server Management Studio, не будут содержать элемент RunTimeInformation для оператора Parallelism.Note: If a query has been compiled as a parallel query, but at run time it is run as a serial query, the Showplan output generated by SET STATISTICS XML or by using the Include Actual Execution Plan option in SQL Server Management StudioSQL Server Management Studio will not contain the RunTimeInformation element for the Parallelism operator. В выходных данных инструкции SET STATISTICS PROFILE подсчет действительного числа строк и фактическое количество выполнений для оператора Parallelism будут равны нулю.In SET STATISTICS PROFILE output, the actual row counts and actual number of executes will display zeroes for the Parallelism operator. Любое из этих условий означает, что оператор Parallelism использовался только при компиляции запроса, но не в рабочем плане запроса.When either condition occurs, it means that the Parallelism operator was only used during query compilation and not in the run-time query plan. Обратите внимание, что иногда планы параллельных запросов выполняются последовательно, если сервер выполняет большое количество параллельных запросов.Note that sometimes parallel query plans are run in serial if there is a high concurrent load on the server.
Значок оператора Parameter Table ScanParameter table scan operator icon Parameter Table ScanParameter Table Scan Оператор Parameter Table Scan просматривает таблицу, переданную как параметр текущего запроса.The Parameter Table Scan operator scans a table that is acting as a parameter in the current query. Обычно он применяется для запросов INSERT из хранимой процедуры.Typically, this is used for INSERT queries within a stored procedure. Parameter Table Scan является логическим и физическим оператором.Parameter Table Scan is a logical and physical operator.
NoneNone Partial AggregatePartial Aggregate ОператорPartial Aggregate используется в параллельных планах.Partial Aggregate is used in parallel plans. Он применяется в статистической функции к максимальному числу входных строк, чтобы избежать записи на диск (сброса на диск).It applies an aggregation function to as many input rows as possible so that writing to disk (known as a "spill") is not necessary. Hash Match — это единственный физический оператор (итератор), реализующий статистическую обработку секций.Hash Match is the only physical operator (iterator) that implements partition aggregation. Partial Aggregate является логическим оператором.Partial Aggregate is a logical operator.
Значок оператора Population Query CursorPopulation query cursor operator icon Population QueryPopulation Query Оператор Population Query заполняет рабочую таблицу курсора при его открытии.The Population Query operator populates the work table of a cursor when the cursor is opened.
Значок оператора Refresh Query CursorRefresh query cursor operator icon Refresh QueryRefresh Query Оператор Refresh Query выбирает текущие данные для строк из буфера выборки.The Refresh Query operator fetches current data for rows in the fetch buffer.
Значок оператора Remote DeleteRemote delete operator icon Remote DeleteRemote Delete Оператор Remote Delete удаляет входные строки удаленного объекта.The Remote Delete operator deletes the input rows from a remote object. Remote Delete является логическим и физическим оператором.Remote Delete is a logical and physical operator.
Оператор Showplan Remote Index SeekRemote index seek showplan operator Remote Index ScanRemote Index Scan Оператор Remote Index Scan просматривает удаленный индекс, указанный в столбце Argument.The Remote Index Scan operator scans the remote index specified in the Argument column. Remote Index Scan является логическим и физическим оператором.Remote Index Scan is a logical and physical operator.
Оператор Showplan Remote Index SeekRemote index seek showplan operator Remote Index SeekRemote Index Seek Оператор Remote Index Seek использует возможности поиска объекта удаленного индекса, чтобы получить строки.The Remote Index Seek operator uses the seeking ability of a remote index object to retrieve rows. Столбец Argument содержит имя используемого удаленного индекса и предикат SEEK:().The Argument column contains the name of the remote index being used and the SEEK:() predicate. Remote Index Seek является логическим физическим оператором.Remote Index Seek is a logical physical operator.
Значок оператора Remote InsertRemote insert operator icon Remote InsertRemote Insert Оператор Remote Insert вставляет входные строки в удаленный объект.The Remote Insert operator inserts the input rows into a remote object. Remote Insert является логическим и физическим оператором.Remote Insert is a logical and physical operator.
Значок оператора Remote QueryRemote query operator icon Remote QueryRemote Query Оператор Remote Query отправляет запрос удаленному источнику.The Remote Query operator submits a query to a remote source. Текст запроса, отправленного удаленному серверу, выводится в столбце Argument .The text of the query sent to the remote server appears in the Argument column. Remote Query является логическим и физическим оператором.Remote Query is a logical and physical operator.
Значок оператора Remote ScanRemote scan operator icon Remote ScanRemote Scan Оператор Remote Scan позволяет удаленно просматривать необходимые объекты.The Remote Scan operator scans a remote object. Имя удаленного объекта появляется в столбце Argument .The name of the remote object appears in the Argument column. Remote Scan является логическим и физическим оператором.Remote Scan is a logical and physical operator.
Значок оператора Remote UpdateRemote update operator icon Remote UpdateRemote Update Оператор Remote Update обновляет входные строки удаленного объекта.The Remote Update operator updates the input rows in a remote object. Remote Update является логическим и физическим оператором.Remote Update is a logical and physical operator.
Значок оператора параллелизма Repartition StreamsRepartition streams parallelism operator icon Repartition StreamsRepartition Streams Оператор Repartition Streams (или итератор обмена) собирает несколько потоков и создает несколько потоков записей.The Repartition Streams operator (or exchange iterator) consumes multiple streams and produces multiple streams of records. Формат и содержимое записей не меняются.The record contents and format are not changed. Если оптимизатор запросов использует фильтр по битовым картам, то число строк в выходном потоке сокращается.If the query optimizer uses a bitmap filter, the number of rows in the output stream is reduced. Каждая запись из входного потока помещается в один выходной поток.Each record from an input stream is placed into one output stream. Если оператор настроен для сохранения порядка, то все входные потоки упорядочиваются и сливаются в несколько упорядоченных выходных потоков.If this operator is order preserving, all input streams must be ordered and merged into several ordered output streams. Если выход является секционированным, столбец Argument содержит предикат PARTITION COLUMNS:() и столбцы секционирования. В случае упорядоченного выхода в столбце Argument содержится предикат ORDER BY:() и упорядочиваемые столбцы.If the output is partitioned, the Argument column contains a PARTITION COLUMNS:() predicate and the partitioning columns.If the output is ordered, the Argument column contains an ORDER BY:() predicate and the columns being ordered. Repartition Streams — это логический оператор.Repartition Streams is a logical operator. Он используется только в параллельных планах запроса.The operator is used only in parallel query plans.
Значок элемента языка ResultResult language element icon РезультатResult Оператор Result представляет собой данные, возвращенные в конце плана запроса.The Result operator is the data returned at the end of a query plan. Обычно он является корневым элементом инструкции Showplan.This is usually the root element of a Showplan. Result является элементом языка.Result is a language element.
Значок оператора RID LookupRID lookup operator icon RID LookupRID Lookup ОператорRID Lookup осуществляет поиск закладки в куче при помощи заданного идентификатора строки.RID Lookup is a bookmark lookup on a heap using a supplied row identifier (RID). Столбец Argument всегда содержит метку закладки, которая применяется для поиска строки в таблице, и имя таблицы, в которой осуществляется поиск.The Argument column contains the bookmark label used to look up the row in the table and the name of the table in which the row is looked up. ОператорRID Lookup всегда сопровождается оператором NESTED LOOP JOIN.RID Lookup is always accompanied by a NESTED LOOP JOIN. RID Lookup является физическим оператором.RID Lookup is a physical operator. Дополнительные сведения о поиске закладок см. в разделеBookmark Lookupна веб-узле MSDN в блоге SQL Server.For more information about bookmark lookups, see "Bookmark Lookup" on the MSDN SQL Server blog.
Значок оператора Row Count SpoolRow count spool operator icon Row Count SpoolRow Count Spool Оператор Row Count Spool просматривает входные данные, подсчитывая число представленных строк и возвращая такое же количество строк, очищенных от данных.The Row Count Spool operator scans the input, counting how many rows are present and returning the same number of rows without any data in them. Этот оператор используется, когда необходимо проверить существование строк, а не наличие в них данных.This operator is used when it is important to check for the existence of rows, rather than the data contained in the rows. Например, если оператор Nested Loops выполняет операцию левого полусоединения, а предикат соединения применяется к внутренним входным данным, оператор Row Count Spool можно разместить выше внутреннего ввода оператора Nested Loops .For example, if a Nested Loops operator performs a left semi join operation and the join predicate applies to inner input, a row count spool may be placed at the top of the inner input of the Nested Loops operator. Тогда оператор Nested Loops может определить количество выходных строк оператора Row Count Spool (поскольку реальные данные с внутренней стороны не требуются) для определения того, нужно ли возвращать внешние строки.Then the Nested Loops operator can determine how many rows are output by the row count spool (because the actual data from the inner side is not needed) to determine whether to return the outer row. ОператорRow Count Spool — это физический оператор.Row Count Spool is a physical operator.
NoneNone Right Anti Semi JoinRight Anti Semi Join Оператор Right Anti Semi Join выводит каждую строку второго (нижнего) входного множества, для которой не существует соответствующей строки в первом (верхнем) входном множестве.The Right Anti Semi Join operator outputs each row from the second (bottom) input when a matching row in the first (top) input does not exist. Соответствующая строка определяется как строка, которая удовлетворяет предикату в столбце Argument (если предиката не существует, то каждая строка является строкой соответствия).A matching row is defined as a row that satisfies the predicate in the Argument column (if no predicate exists, each row is a matching row). Right Anti Semi Join является логическим оператором.Right Anti Semi Join is a logical operator.
NoneNone Right Outer JoinRight Outer Join Оператор Right Outer Join возвращает каждую строку, которая удовлетворяет соединению второго (нижнего) входа с первым (верхним).The Right Outer Join operator returns each row that satisfies the join of the second (bottom) input with each matching row from the first (top) input. Она также возвращает все строки из второго входа, для которых нет совпадений в первом, соединяя их со значением NULL.It also returns any rows from the second input that had no matching rows in the first input, joined with NULL. Если в столбце Argument предикат соединения отсутствует, каждая строка будет считаться подходящей.If no join predicate exists in the Argument column, each row is a matching row. Right Outer Join является логическим оператором.Right Outer Join is a logical operator.
NoneNone Right Semi JoinRight Semi Join Оператор Right Semi Join возвращает каждую строку из второго (нижнего) потока входных данных, если имеется соответствующая строка в первом (нижнем) потоке входных данных.The Right Semi Join operator returns each row from the second (bottom) input when there is a matching row in the first (top) input. Если в столбце Argument предикат соединения отсутствует, каждая строка будет считаться подходящей.If no join predicate exists in the Argument column, each row is a matching row. Right Semi Join является логическим оператором.Right Semi Join is a logical operator.
Значок оператора SegmentSegment operator icon SegmentSegment Segment является физическим и логическим оператором.Segment is a physical and a logical operator. Он делит входной набор на сегменты в соответствии со значением одного или нескольких столбцов.It divides the input set into segments based on the value of one or more columns. Эти столбцы отображаются в виде аргументов оператора Segment .These columns are shown as arguments in the Segment operator. Затем оператор выводит по одному сегменту за раз.The operator then outputs one segment at a time.
Значок оператора SequenceSequence operator icon ПоследовательностьSequence Оператор Sequence выполняет планы широкого обновления.The Sequence operator drives wide update plans. Практически он выполняет каждый вход по очереди (сверху вниз).Functionally, it executes each input in sequence (top to bottom). Каждый вход обычно является обновлением отдельного объекта.Each input is usually an update of a different object. Он возвращает лишь строки, полученные из последнего (нижнего) входа.It returns only those rows that come from its last (bottom) input. Sequence является логическим и физическим оператором.Sequence is a logical and physical operator.
Значок оператора Sequence ProjectSequence project operator icon Проект последовательностиSequence Project Оператор Sequence Project добавляет столбцы для выполнения вычислений над упорядоченным набором.The Sequence Project operator adds columns to perform computations over an ordered set. Он делит входной набор на сегменты в соответствии со значением одного или нескольких столбцов.It divides the input set into segments based on the value of one or more columns. Затем оператор выводит по одному сегменту за раз.The operator then outputs one segment at a time. Эти столбцы отображаются как аргументы оператора Sequence Project .These columns are shown as arguments in the Sequence Project operator. Sequence Project является логическим и физическим оператором.Sequence Project is a logical and physical operator.
NoneNone Segment RepartitionSegment Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов.In a parallel query plan, sometimes there are conceptual regions of iterators. Все итераторы в рамках такой области могут обрабатываться параллельными потоками.All of the iterators within such a region can be executed by parallel threads. Сами же области должны обрабатываться последовательно.The regions themselves must be executed serially. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition.Some of the Parallelism iterators within an individual region are called Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition.The Parallelism iterator at the boundary of two such regions is called Segment Repartition. Branch Repartition и Segment Repartition являются логическими операторами.Branch Repartition and Segment Repartition are logical operators.
Значок оператора Snapshot CursorSnapshot cursor operator icon Моментальный снимокSnapshot Оператор Snapshot создает курсор, который не видит изменений, сделанных другими курсорами.The Snapshot operator creates a cursor that does not see changes made by others.
Значок оператора SortSort operator icon SortSort Оператор Sort сортирует входящие строки.The Sort operator sorts all incoming rows. Столбец Argument содержит либо предикат DISTINCT ORDER BY:(), если в этой операции удаляются дубликаты, либо предикат ORDER BY:() с разделенным запятыми списком сортируемых столбцов.The Argument column contains either a DISTINCT ORDER BY:() predicate if duplicates are removed by this operation, or an ORDER BY:() predicate with a comma-separated list of the columns being sorted. Столбцы имеют префикс со значением ASC, если они сортируются по возрастанию, или значением DESC, если сортируются по убыванию.The columns are prefixed with the value ASC if the columns are sorted in ascending order, or the value DESC if the columns are sorted in descending order. Sort — это логический и физический оператор.Sort is a logical and physical operator.
Значок оператора SplitSplit operator icon SplitSplit Оператор Split используется для оптимизации процесса обновления.The Split operator is used to optimize update processing. Он разбивает каждую операцию обновления на операции удаления и вставки.It splits each update operation into a delete and an insert operation. ОператорSplit является логическим и физическим оператором.Split is a logical and physical operator.
Значок оператора SpoolSpool operator icon Eager SpoolEager Spool Оператор Eager Spool принимает весь ввод, сохраняя каждую строку в скрытый временный объект базы данных tempdb .The Eager Spool operator takes the entire input, storing each row in a hidden temporary object stored in the tempdb database. Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.If the operator is rewound (for example, by a Nested Loops operator) but no rebinding is needed, the spooled data is used instead of rescanning the input. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода.If rebinding is needed, the spooled data is discarded and the spool object is rebuilt by rescanning the (rebound) input. Оператор Eager Spool выполняет построение своего буферного файла «жадным» способом: когда родительский оператор буфера запрашивает первую строку, оператор буферизации принимает все строки из своего входного оператора и сохраняет ее в буфер.The Eager Spool operator builds its spool file in an "eager" manner: when the spool's parent operator asks for the first row, the spool operator consumes all rows from its input operator and stores them in the spool. Eager Spool — логический оператор.Eager Spool is a logical operator.
Значок оператора SpoolSpool operator icon Lazy SpoolLazy Spool Логический оператор Lazy Spool сохраняет все строки входных данных в скрытом временном объекте, который хранится в базе данных tempdb .The Lazy Spool logical operator stores each row from its input in a hidden temporary object stored in the tempdb database. Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.If the operator is rewound (for example, by a Nested Loops operator) but no rebinding is needed, the spooled data is used instead of rescanning the input. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода.If rebinding is needed, the spooled data is discarded and the spool object is rebuilt by rescanning the (rebound) input. Оператор Lazy Spool производит отложенное построение своего буферного файла: каждый раз, когда родительский оператор буфера запрашивает строку, оператор буферизации получает строку из своего входного оператора и сохраняет ее в буфер, а не обрабатывает все строки сразу.The Lazy Spool operator builds its spool file in a "lazy" manner, that is, each time the spool's parent operator asks for a row, the spool operator gets a row from its input operator and stores it in the spool, rather than consuming all rows at once. Lazy Spool — это логический оператор.Lazy Spool is a logical operator.
Значок оператора SpoolSpool operator icon SpoolSpool Оператор Spool сохраняет промежуточные результаты запроса в базе данных tempdb .The Spool operator saves an intermediate query result to the tempdb database.
Значок оператора Stream AggregateStream aggregate operator icon Статистическое выражение потокаStream Aggregate Оператор Stream Aggregate группирует строки в один или несколько столбцов и вычисляет одно или несколько агрегатных выражений, возвращенных запросом.The Stream Aggregate operator groups rows by one or more columns and then calculates one or more aggregate expressions returned by the query. Выход этого оператора может быть использован последующими операторами запроса, возвращен клиенту или то и другое.The output of this operator can be referenced by later operators in the query, returned to the client, or both. Оператору Stream Aggregate необходимы входные данные, упорядоченные по группируемым столбцам.The Stream Aggregate operator requires input ordered by the columns within its groups. Оптимизатор использует перед этим оператором оператор Sort , если данные не были ранее отсортированы оператором Sort или используется упорядоченный поиск или просмотр в индексе.The optimizer will use a Sort operator prior to this operator if the data is not already sorted due to a prior Sort operator or due to an ordered index seek or scan. В инструкции SHOWPLAN_ALL или графическом плане выполнения в среде SQL Server Management StudioSQL Server Management Studioстолбцы в предикате GROUP BY перечисляются в столбце Argument , а агрегатные выражения — в столбце Defined Values .In the SHOWPLAN_ALL statement or the graphical execution plan in SQL Server Management StudioSQL Server Management Studio, the columns in the GROUP BY predicate are listed in the Argument column, and the aggregate expressions are listed in the Defined Values column. Stream Aggregate является физическим оператором.Stream Aggregate is a physical operator.
Значок оператора SwitchSwitch operator icon ПараметрSwitch ОператорSwitch представляет собой особый тип итератора объединения, который имеет n входов.Switch is a special type of concatenation iterator that has n inputs. Выражение связывается с каждым оператором Switch .An expression is associated with each Switch operator. В зависимости от возвращаемого значения выражения (между 0 и n-1) оператор Switch копирует соответствующий входной поток в выходной поток.Depending on the return value of the expression (between 0 and n-1), Switch copies the appropriate input stream to the output stream. В частности, оператор Switch применяется при реализации планов запроса, содержащих быстрые курсоры прямого направления с такими операторами, как TOP .One use of Switch is to implement query plans involving fast forward cursors with certain operators such as the TOP operator. Switch является и логическим, и физическим оператором.Switch is both a logical and physical operator.
Значок оператора Table DeleteTable delete operator icon Table DeleteTable Delete Физический оператор Table Delete удаляет строки из таблицы, указанной в столбце Аргумент плана выполнения запроса.The Table Delete physical operator deletes rows from the table specified in the Argument column of the query execution plan.
Значок оператора Table InsertTable insert operator icon Table InsertTable Insert Оператор Table Insert вставляет строки из своих входных данных в таблицу, указанную в столбце Argument плана выполнения запроса.The Table Insert operator inserts rows from its input into the table specified in the Argument column of the query execution plan. В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца.The Argument column also contains a SET:() predicate, which indicates the value to which each column is set. Если оператор Table Insert не имеет потомков для вставки значений, то вставленная строка берется из самого оператора вставки.If Table Insert has no children for insert values, then the row inserted is taken from the Insert operator itself. Table Insert является физическим оператором.Table Insert is a physical operator.
Оператор Table MergeTable merge operator Table MergeTable Merge Оператор Table Merge применяет поток данных слияния к куче.The Table Merge operator applies a merge data stream to a heap. Оператор удаляет, обновляет или вставляет строки в таблицу, указанную в столбце Argument оператора.The operator deletes, updates, or inserts rows in the table specified in the Argument column of the operator. Тип выполненной операции зависит от значения времени выполнения столбца ACTION , указанного в столбце Argument оператора.The actual operation performed depends on the run-time value of the ACTION column specified in the Argument column of the operator. Table Merge является физическим оператором.Table Merge is a physical operator.
Значок оператора Table ScanTable scan operator icon Table ScanTable Scan Оператор Table Scan получает строки из таблицы, указанной в столбце Аргумент плана выполнения запроса.The Table Scan operator retrieves all rows from the table specified in the Argument column of the query execution plan. Если предикат WHERE:() присутствует в столбце Argument , возвращаются только строки, удовлетворяющие условию, указанному в этом предикате.If a WHERE:() predicate appears in the Argument column, only those rows that satisfy the predicate are returned. Table Scan является логическим и физическим оператором.Table Scan is a logical and physical operator.
Значок оператора Table SpoolTable spool operator icon Table SpoolTable Spool Оператор Table Spool просматривает входную таблицу и помещает копию каждой строки в скрытую буферную таблицу, которая находится в базе данных tempdb и существует только в течение времени жизни запроса.The Table Spool operator scans the input and places a copy of each row in a hidden spool table that is stored in the tempdb database and existing only for the lifetime of the query. Если оператор сбрасывается на начало (например, оператором Nested Loops ), но при этом не требуется повторная привязка, то вместо повторного сканирования ввода используются буферизованные данные.If the operator is rewound (for example, by a Nested Loops operator) but no rebinding is needed, the spooled data is used instead of rescanning the input. Table Spool является физическим оператором.Table Spool is a physical operator.
Значок оператора Table SpoolTable spool operator icon Window SpoolWindow Spool Оператор Window Spool расширяет каждую строку в набор строк, представляющий связанное с ним окно.The Window Spool operator expands each row into the set of rows that represents the window associated with it. В запросе предложение OVER определяет окно в наборе результатов запроса, а оконная функция затем вычисляет значения для каждой строки в окне.In a query, the OVER clause defines the window within a query result set and a window function then computes a value for each row in the window. Window Spool является логическим и физическим оператором.Window Spool is a logical and physical operator.
Значок оператора Table UpdateTable update operator icon Table UpdateTable Update Физический оператор Table Update обновляет входные строки в таблице, указанной в столбце Аргумент плана выполнения запроса.The Table Update physical operator updates input rows in the table specified in the Argument column of the query execution plan. Предикат SET:() определяет значение для каждого обновляемого столбца.The SET:() predicate determines the value of each updated column. Эти значения могут быть упомянуты в предложении SET или в другом месте в этом операторе, а также в каком-либо другом месте в рамках запроса.These values may be referenced in the SET clause or elsewhere within this operator as well as elsewhere within this query.
Значок оператора Table-valued FunctionTable-valued function operator icon Table-valued FunctionTable-valued Function Оператор Table-valued Function вычисляет функцию с табличным значением (языка Transact-SQLTransact-SQL или среды CLR) и сохраняет строки результата в базе данных tempdb .The Table-valued Function operator evaluates a table-valued function (either Transact-SQLTransact-SQL or CLR), and stores the resulting rows in the tempdb database. Когда родительские итераторы запрашивают эти строки, оператор Table-valued Function возвращает эти строки из базы данных tempdb.When the parent iterators request the rows, Table-valued Function returns the rows from tempdb.

Запросы, вызывающие функции с табличным значением, формируют планы запросов с итератором Table-valued Function .Queries with calls to table-valued functions generate query plans with the Table-valued Function iterator. Функция с табличным значением может вычисляться с различными значениями параметров:Table-valued Function can be evaluated with different parameter values:

-
Модуль чтения функции с табличным значением XML принимает большой двоичный объект XML как параметр и возвращает набор строк, представляющий узлы XML в том же порядке, что и в документе XML.Table-valued Function XML Reader inputs an XML BLOB as a parameter and produces a rowset representing XML nodes in XML document order. Другие параметры могут ограничивать возвращаемые XML-узлы подмножеством XML-документа.Other input parameters may restrict XML nodes returned to a subset of XML document.

-Модуль чтения функции с табличным значением XML с фильтром XPath — это специальный тип модуля чтения функции с табличным значением XML , ограничивающий результат узлами XML, соответствующими выражению XPath.-Table Valued Function XML Reader with XPath filter is a special type of XML Reader Table-valued Function that restricts output to XML nodes satisfying an XPath expression.

ОператорTable-valued Function — это логический и физический оператор.Table-valued Function is a logical and physical operator.
NoneNone Top N SortTop N Sort ОператорTop N Sort аналогичен итератору Sort за исключением того, что требуются только первые N строк, а не весь результирующий набор.Top N Sort is similar to the Sort iterator, except that only the first N rows are needed, and not the entire result set. Для небольших значений Nядро выполнения запросов SQL ServerSQL Server пытается выполнить операцию сортировки полностью в памяти.For small values of N, the SQL ServerSQL Server query execution engine attempts to perform the entire sort operation in memory. Для больших значений Nядро выполнения запросов использует более общий способ сортировки, в котором N не является параметром.For large values of N, the query execution engine resorts to the more generic method of sorting to which N is not a parameter.
Значок оператора TopTop operator icon TopTop Оператор Top просматривает входные данные и возвращает только указанное число или процент строк, выбранных, возможно, на основе порядка сортировки.The Top operator scans the input, returning only the first specified number or percent of rows, possibly based on a sort order. Столбец Аргумент может содержать список столбцов, которые проверяются на наличие связей.The Argument column can contain a list of the columns that are being checked for ties. Планируется использовать оператор Top для соблюдения ограничений на число строк.In update plans, the Top operator is used to enforce row count limits. Top — это логический и физический оператор.Top is a logical and physical operator.
Значок оператора Extended (UDX)Extended operator (UDX) icon UDXUDX Расширенные операторы (UDX) реализуют часть операций XQuery и XPath в SQL ServerSQL Server.Extended Operators (UDX) implement one of many XQuery and XPath operations in SQL ServerSQL Server. Все операторы UDX являются и логическими, и физическими операторами.All UDX operators are both logical and physical operators.

Расширенный оператор (UDX) FOR XML используется для сериализации реляционных наборов строк, которые он получает на входе, в представление XML в одном столбце BLOB в единственной строке на выходе.Extended operator (UDX) FOR XML is used to serialize the relational row set it inputs into XML representation in a single BLOB column in a single output row. Это статистический оператор XML, учитывающий порядок данных.It is an order sensitive XML aggregation operator.

Расширенный оператор (UDX) XML SERIALIZER — это статистический оператор XML, учитывающий порядок данных.Extended operator (UDX) XML SERIALIZER is an order sensitive XML aggregation operator. Он получает на входе строки, представляющие XML-узлы или скаляры XQuery в порядке, соответствующем XML-документу, и выдает сериализованный XML BLOB в единственном XML-столбце единственной строки вывода.It inputs rows representing XML nodes or XQuery scalars in XML document order and produces a serialized XML BLOB in a single XML column in a single output row.

Расширенный оператор (UDX) XML FRAGMENT SERIALIZER является особым видом оператора XML SERIALIZER , использующимся для обработки входных строк, представляющих фрагменты XML, вставляемые в расширение вставки данных XQuery.Extended operator (UDX) XML FRAGMENT SERIALIZER is a special type of XML SERIALIZER that is used for processing input rows representing XML fragments being inserted in XQuery insert data modification extension.

Расширенный оператор (UDX) XQUERY STRING вычисляет строковое значение XQuery из входных строк, представляющих собой узлы XML.Extended operator (UDX) XQUERY STRING evaluates the XQuery string value of input rows representing XML nodes. Это статистический строковый оператор, чувствительный к порядку данных.It is an order sensitive string aggregation operator. Он выводит одну строку со столбцами, представляющими скаляр XQuery, содержащий строковое значение входа.It outputs one row with columns representing the XQuery scalar that contains string value of the input.

Расширенный оператор (UDX) XQUERY LIST DECOMPOSER является оператором декомпозиции списка XQuery.Extended operator (UDX) XQUERY LIST DECOMPOSER is an XQuery list decomposition operator. Для каждой входной строки, представляющей собой узел XML, он создает одну или несколько строк, представляющих скаляр XQuery, содержащий значение элемента списка, если входные данные имеют тип списка XSD.For each input row representing an XML node it produces one or more rows each representing XQuery scalar containing a list element value if the input is of XSD list type.

Расширенный оператор (UDX) XQUERY DATA определяет значение функции XQuery fn:data() для входных данных, представляющих собой узлы XML.Extended operator (UDX) XQUERY DATA evaluates the XQuery fn:data() function on input representing XML nodes. Это статистический строковый оператор, чувствительный к порядку данных.It is an order sensitive string aggregation operator. Он выводит одну строку со столбцами, представляющими собой скаляр XQuery, содержащий значение функции fn:data() .It outputs one row with columns representing XQuery scalar that contains the result of fn:data().

Расширенный оператор (UDX) XQUERY CONTAINS определяет значение функции XQuery fn:data() для входных данных, представляющих собой узлы XML.Extended operator XQUERY CONTAINS evaluates the XQuery fn:contains() function on input representing XML nodes. Это статистический строковый оператор, чувствительный к порядку данных.It is an order sensitive string aggregation operator. Он выводит одну строку со столбцами, представляющими собой скаляр XQuery, содержащий значение функции fn:contains() .It outputs one row with columns representing XQuery scalar that contains the result of fn:contains().

Расширенный оператор UPDATE XML NODE обновляет узел XML в расширении замены модификации данных XQuery с помощью метода modify() типа XML.Extended operator UPDATE XML NODE updates XML node in the XQuery replace data modification extension in the modify() method on XML type.
NoneNone UnionUnion Оператор Union просматривает несколько входов, выводя каждую просмотренную строку и удаляя дубликаты.The Union operator scans multiple inputs, outputting each row scanned and removing duplicates. Union — это логический оператор.Union is a logical operator.
Значок оператора Update (ядро СУБД)Update (Database Engine) operator icon UpdateUpdate Оператор Update обновляет каждую строку, начиная с ее ввода в объект, указанный в столбце Argument плана выполнения запроса.The Update operator updates each row from its input in the object specified in the Argument column of the query execution plan. Update является логическим оператором.Update is a logical operator. Операторы Table Update, Index Updateили Clustered Index Updateявляются физическими.The physical operator is Table Update, Index Update, or Clustered Index Update.
Значок элемента языка WhileWhile language element icon WhileWhile Оператор While реализует цикл while языка Transact-SQLTransact-SQL .The While operator implements the Transact-SQLTransact-SQL while loop. While является элементом языка.While is a language element