Поделиться через


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

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

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

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

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

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

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

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

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

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

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

СчетчикиActualRebinds и ActualRewinds присутствуют в выводе инструкции Showplan в формате XML, который произведен с использованием инструкции SET STATISTICS XML ON. Они заполняются только для операторов Некластеризованного индекса, Remote Query, , Spool количества строк, Sort, Табличной очереди и Функции с табличным значением . ActualRebinds и ActualRewinds также могут быть заполнены для Assert операторов и Filter , если атрибут StartupExpression имеет значение TRUE.

Когда счетчики ActualRebinds и ActualRewinds присутствуют в выводе инструкции Showplan в формате XML, их значения сравнимы со значениями EstimateRebinds и EstimateRewinds. Когда они отсутствуют, оценочное число строк (EstimateRows) сравнимо с действительным числом строк (ActualRows). Обратите внимание, что действительный графический вывод Showplan отображает нули для действительных повторных привязок и сбросов на начало, когда те отсутствуют.

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

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

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

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

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

Этот раздел содержит описания логических и физических операторов.

Значок графического плана выполнения Оператор Showplan Описание
Нет Aggregate Оператор Aggregate вычисляет выражения с функциями MIN, MAX, SUM, COUNT или AVG. Оператор Aggregate может быть логическим или физическим.
Значок оператора арифметического выражения Arithmetic Expression Оператор Arithmetic Expression вычисляет новое значение на основе существующих значений в строке. Arithmetic Expressionне используется в SQL Server 2014.
Значок оператора Assert Assert Оператор Assert проверяет условие. Например, этот оператор проверяет целостность ссылок или гарантирует, что скалярный вложенный запрос возвращает одну строку. Для каждой Assert входной строки оператор вычисляет выражение в столбце Argument плана выполнения. Если значением этого выражения является NULL, строка передается через оператор Assert и выполнение запроса продолжается. При значении этого выражения, отличном от NULL, будет выдана соответствующая ошибка. Assert является физическим оператором.
Значок " Assign Оператор Assign присваивает переменной значение выражения или константы. Assign является элементом языка.
Нет Asnyc Concat Оператор Asnyc Concat применяется только в удаленных запросах (распределенных запросах). Он имеет n дочерних узлов и один родительский узел. Обычно некоторые дочерние узлы являются удаленными компьютерами, участвующими в распределенном запросе. Оператор Asnyc Concat выполняет вызовы методов open() одновременно ко всем дочерним узлам, а затем применяет к каждому битовую карту. Для каждого бита, равного 1, оператор Async Concat по запросу отправляет выходные строки родительскому узлу.
Значок оператора Bitmap Bitmap SQL Server использует оператор для Bitmap реализации фильтрации растровых изображений в параллельных планах запросов. Фильтрация точечных изображений ускоряет выполнение запроса, устраняя строки со значениями ключей Parallelism , которые не могут создавать записи соединения перед передачей строк через другой оператор, например оператор . Фильтр по битовым картам использует компактное представление набора значений из таблицы, находящейся в одной части дерева операторов, для фильтрации строк из другой таблицы, находящейся в другой части дерева. Если сразу удалять ненужные строки в запросе, последующие операторы работают с меньшим количеством строк, тем самым повышая общую производительность. Оптимизатор определяет, достаточно ли избирательна битовая маска, чтобы быть полезной, и в каких операторах применить фильтр. Bitmap является физическим оператором.
Значок оператора Bitmap Bitmap Create Оператор Bitmap Create появляется на выходе инструкции Showplan, в которой строятся битовые маски. Bitmap Create является логическим оператором.
Значок оператора поиска Bookmark Lookup Оператор Bookmark Lookup производит поиск соответствующей строки в таблице или кластеризованном индексе по закладке (идентификатору строки или ключу кластеризации). Столбец Argument содержит метку закладки, используемую для поиска строки в таблице или кластеризованном индексе. Столбец Argument также содержит имя таблицы или кластеризованного индекса, в котором выполняется поиск строки. Если в Argument столбце отображается предложение WITH PREFETCH, обработчик запросов определил, что оптимально использовать асинхронную предварительную выборку (упреждающее чтение) при поиске закладок в таблице или кластеризованном индексе.

Bookmark Lookupне используется в SQL Server 2014. Вместо этого функцию поиска закладок обеспечивают операторы Clustered Index Seek и RID Lookup. Оператор Key Lookup также выполняет данные функции.
Нет Branch Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов. Все итераторы в рамках такой области могут обрабатываться параллельными потоками. Сами же области должны обрабатываться последовательно. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition. Branch Repartition и Segment Repartition являются логическими операторами.
Нет Broadcast Broadcast имеет один дочерний узел и n родительских узлов. Broadcast рассылает входные строки нескольким получателям по требованию. Каждый пользователь получает полный набор строк. Например, если все получатели являются элементами хэш-соединения, то будет создано n копий хэш-таблиц.
Значок хэш-оператора сборки Build Hash Указывает сборку хэш-таблицы пакета для индекса columnstore, оптимизированного для памяти xVelocity.
None Cache Cache — это специализированная версия оператора Spool . Он сохраняет только одну строку данных. Cache является логическим оператором. Cacheне используется в SQL Server 2014 г.
Значок оператора clustered index delete значок Clustered Index Delete Оператор Clustered Index Delete удаляет строки из кластеризованного индекса, заданного в столбце Argument плана выполнения запроса. При наличии в столбце Argument предиката WHERE:() удаляются только строки, удовлетворяющие условиям предиката. Clustered Index Delete является физическим оператором.
Значок оператора clustered index insert Значок оператора Clustered Index Insert Оператор Clustered Index Insert инструкции Showplan вставляет строки со своего входа в кластеризованный индекс, указанный в столбце Argument. В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца. Если Clustered Index Insert для значений insert нет дочерних элементов, вставленная строка берется из Insert самого оператора . Clustered Index Insert является физическим оператором.
Оператор кластеризованного слияния Clustered Index Merge Оператор Clustered Index Merge применяет поток данных слияния к кластеризованному индексу. Оператор удаляет, обновляет или вставляет строки из кластеризованного индекса, указанного в столбце Argument оператора . Фактическая выполненная операция зависит от значения среды выполнения столбца ACTION , указанного в столбце Argument оператора . Clustered Index Merge является физическим.
Значок оператора clustered index scan значок оператора Clustered Index Scan Оператор Clustered Index Scan сканирует кластеризованный индекс, заданный в столбце Argument плана выполнения запроса. При наличии необязательного предиката WHERE:() возвращаются только строки, удовлетворяющие предикату. Если столбец Argument содержит предложение ORDERED, обработчик запросов требует, чтобы выходные данные строк были возвращены в порядке, в соответствии с которым они были отсортированы в кластеризованном индексе. Если предложение ORDERED отсутствует, подсистема хранилища выполняет поиск в индексе оптимальным способом, без обязательной сортировки выходных данных. Clustered Index Scan является логическим и физическим оператором.
Значок оператора clustered index seek значок Clustered Index Seek Оператор Clustered Index Seek использует возможности поиска по индексам для получения строк из кластеризованного индекса. Столбец Argument содержит имя используемого кластеризованного индекса и предикат SEEK:(). Подсистема хранилища использует этот индекс для обработки только тех строк, которые удовлетворяют данному предикату SEEK:(). Также может включаться предикат WHERE:(), в котором подсистема хранилища вычисляет выражение для всех строк, удовлетворяющих предикату SEEK:(), но это не является обязательным и не использует индексы для завершения процесса.

Argument Если столбец содержит предложение ORDERED, обработчик запросов определил, что строки должны быть возвращены в порядке, в котором кластеризованный индекс отсортировал их. Если предложение ORDERED отсутствует, подсистема хранилища выполняет поиск индекса оптимальным способом, без обязательной сортировки выходных данных. Сохранять порядок выходных данных является менее эффективным, чем формировать несортированные выходные данные. При указании ключевого слова LOOKUP выполняется поиск закладок. В SQL Server 2008 и более поздних версиях Key Lookup оператор предоставляет функции поиска закладок. Clustered Index Seek является логическим и физическим оператором.
Значок оператора кластеризованного обновления индекса Значок Clustered Index Update Оператор Clustered Index Update обновляет входные строки в кластеризованном индексе, указанном в столбце Argument . При наличии предиката WHERE:() обновляются только те строки, которые удовлетворяют этому предикату. При наличии предиката SET:() данное значение устанавливается для каждого обновляемого столбца. При наличии предиката DEFINE:() перечисляются значения, определенные данным оператором. Ссылки на эти значения могут присутствовать в предложении SET или в любом месте внутри данного оператора либо внутри данного запроса. Clustered Index Update является логическим и физическим оператором.
Значок оператора Collapse Collapse Оператор Collapse оптимизирует процедуру обновления. При выполнении она может быть разбита (оператором Split) на операции удаления и вставки. Столбец Argument содержит предложение GROUP BY:(), указывающее список ключевых столбцов. Если обработчик запросов встречает смежные строки, удаляющие и вставляющие одни и те же значения ключей, он заменяет эти отдельные операции на одну, более эффективную операцию обновления. Collapse является логическим и физическим оператором.
Проверка индекса columnstore. Columnstore Index Scan Оператор Columnstore Index Scan сканирует индекс columnstore, указанный в столбце Argument плана выполнения запроса.
Значок скалярного оператора вычислений Значок Compute Scalar Оператор Compute Scalar вычисляет выражение для получения вычисляемого скалярного значения. Затем эту величину можно вернуть пользователю или сослаться на нее в каком-либо запросе, а также выполнить эти действия одновременно. Примерами одновременного использования этих возможностей являются предикаты фильтра или соединения. Compute Scalar является логическим и физическим оператором.

Compute Scalar Операторы, которые отображаются в Showplans, созданных с помощью SET STATISTICS XML, могут не содержать RunTimeInformation элемента . (В графических инструкциях Showplan Фактическое число строк, Фактическое число повторных привязоки Фактическое число сбросов на начало могут отсутствовать в окне Свойства , если в среде выбран параметр Включить действительный план выполнения SQL Server Management Studio.) В данном случае это означает, что хотя эти операторы были использованы в скомпилированном плане запроса, их работа выполнялась другими операторами в исполняемом плане запроса. Кроме того, обратите внимание, что число запусков на выходе Showplan, сформированных SET STATISTICS PROFILE, равно сумме повторных привязок и сбросов на начало в инструкциях Showplan, сформированных XML SET STATISTICS.
Значок оператора объединения Значок оператора Concatenation Оператор Concatenation просматривает несколько входов, возвращая каждую просмотренную строку. Объединение обычно используется для реализации конструкции Transact-SQL UNION ALL. Физический оператор Concatenation имеет два или более входов и один выход. Он копирует строки из первого входного потока в выходной поток и повторяет эту операцию для каждого дополнительного входного потока. Concatenation является как логическим, так и физическим оператором.
Значок оператора константного сканирования Constant Scan Оператор Constant Scan вводит одну или несколько постоянных строк в запрос. Оператор Compute Scalar часто используется после для Constant Scan добавления столбцов в строку, созданную оператором Constant Scan .
Значок элемента языка Convert (Database Engine) Convert Оператор Convert автоматически преобразует скалярные данные из одного типа в другой. Convert является элементом языка.
Нет Cross Join Оператор Cross Join соединяет каждую строку из первого (верхнего) входного параметра с каждой строкой второго (нижнего) входного параметра. Cross Join является логическим оператором.
Значок оператора Cursor catchall cursor catchall Общий значок отображается в тех случаях, когда с помощью логики, управляющей графическими планами визуализации, не удается найти подходящий значок для итератора. Значок общего захвата не обязательно указывает на ошибку. Существует три значка catchall: синий (для итераторов), оранжевый (для курсоров) и зеленый (для элементов языка Transact-SQL).
None Курсор Логический и физический операторы Cursor предназначены для описания того, каким образом выполняются операции запроса или обновления с участием курсора. Физические операторы описывают алгоритм физической реализации обработки курсора, например использование курсора, управляемого набором ключей. Каждый шаг выполнения курсора соответствует физическому оператору. Логические операторы описывают свойства курсора, например доступность курсора только для чтения.

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

Физические операторы включают в себя Dynamic, Fetch Query, Keyset, Population Query, Refresh Query и Snapshot.
Значок объявления языкового элемента Declare Оператор Declare выделяет локальную переменную в плане запроса. Declare является элементом языка.
Значок оператора Delete (Ядро СУБД) Значок оператора Delete Оператор Delete удаляет из объекта строки, удовлетворяющие необязательному предикату в столбце Argument .
Значок оператора Deleted Scan Оператор Deleted Scan просматривает удаленную таблицу в триггере.
Нет Distinct Оператор Distinct удаляет дубликаты из набора строк или из коллекции значений. Distinct является логическим оператором.
Нет Distinct Sort Логический Distinct Sort оператор сканирует входные данные, удаляя дубликаты и сортируя их по столбцам, указанным в предикате DISTINCT ORDER BY:() столбца Argument . Distinct Sort является логическим оператором.
Значок оператора " " Distribute Streams Оператор Distribute Streams используется только в параллельных планах запросов. Оператор Distribute Streams преобразует один входящий поток записей в несколько выходящих потоков. Формат и содержимое записей не меняются. Каждая запись из входящего потока направляется в один из выходящих потоков. Данный оператор автоматически сохраняет в выходящих потоках относительный порядок входящих записей. Чтобы определить выходящий поток, в который попадет запись из входящего потока, обычно используется хэширование.

Если выходные данные секционированы, столбец Argument содержит предикат PARTITION COLUMNS:() и столбцы секционирования. ОператорDistribute Streams является логическим оператором.
Значок оператора динамического курсора Значок оператора динамического Dynamic В операторе Dynamic используется курсор, который отслеживает изменения, внесенные другими.
Значок оператора Eager Spool Оператор Eager Spool принимает все входные данные, сохраняя каждую строку в скрытом временном объекте, хранящейся в tempdb базе данных. Если оператор перенапрягается (например, оператором Nested Loops ), но повторная привязка не требуется, вместо повторного сканирования входных данных используются хранимые данные. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода. Оператор Eager Spool выполняет построение своего буферного файла «жадным» способом: когда родительский оператор буфера запрашивает первую строку, оператор буферизации принимает все строки из своего входного оператора и сохраняет ее в буфер. Eager Spool — логический оператор.
Значок оператора Fetch Query Оператор Fetch Query извлекает строки, если выборка выполняется в курсоре.
Значок оператора Filter (Компонент Database Engine) Значок оператора Filter Фильтр Оператор Filter сканирует входные данные, возвращая только те строки, которые соответствуют выражению фильтра (предикату), который отображается в столбце Argument .
Нет Flow Distinct Логический оператор Flow Distinct просматривает входные данные и удаляет дубликаты. Distinct В то время как оператор использует все входные данные перед созданием каких-либо выходных данных, оператор FlowDistinct возвращает каждую строку по мере ее получения из входных данных (если только эта строка не является дубликатом, в этом случае она отбрасывается).
Нет Full Outer Join Логический оператор Full Outer Join возвращает каждую строку, удовлетворяющую предикату соединения из первого (верхнего) входа и соединенную с каждой строкой из второго (нижнего) входа. Он также возвращает строки из:

первых входных данных, не имеющих соответствий во вторых входных данных;

вторых входных данных, не имеющих соответствий в первых входных данных.



Вход, не содержащий совпадающих значений, возвращается как значение NULL. Full Outer Join является логическим оператором.
Значок оператора Параллелизм сбора потоков Значок Gather Streams Оператор Gather Streams используется только в планах параллельных запросов. Оператор Gather Streams считывает несколько входных потоков и создает один выходной поток записей, комбинируя все входные потоки. Формат и содержимое записей не меняются. Если этот оператор сохраняет порядок, все входные потоки должны быть упорядочены. Если выходные данные упорядочены, Argument столбец содержит предикат ORDER BY:() и имена упорядоченных столбцов. Gather Streams — логический оператор.
Значок оператора " " Hash Match Оператор Hash Match строит хэш-таблицу при помощи вычисления хэш-значения для каждой строки из своих входных данных. В столбце появится предикат HASH:() со списком столбцов, используемых Argument для создания хэш-значения. Затем для каждой тестовой строки (если возможно) он вычисляет хэш-значение (с использованием той же хэш-функции) и осуществляет поиск совпадений по хэш-таблице. Если в Argument столбце присутствует остаточный предикат (идентифицируемый по методу RESIDUAL:(), этот предикат также должен быть выполнен для строк, которые считаются совпадением. Поведение зависит от выполняемой логической операции.

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

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

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



Hash Match является физическим оператором.
Если значок элемента языка If Оператор If выполняет условную обработку в зависимости от значения выражения. If является элементом языка.
Нет Inner Join Логический оператор Inner Join возвращает каждую строку, которая удовлетворяет соединению первого (верхнего) входа со вторым (нижним).
Значок оператора Insert (Компонент Database Engine) Значок оператора Insert Логический Insert оператор вставляет каждую строку из входных данных в объект, указанный в столбце Argument . Соответствующим физическим оператором является Table Insert, Index Insert или Clustered Index Insert.
Значок оператора " Inserted Scan Оператор Inserted Scan просматривает таблицу inserted . Inserted Scan является логическим и физическим оператором.
Значок встроенного элемента языка Значок Intrinsic Оператор Intrinsic вызывает внутреннюю функцию Transact-SQL. Intrinsic является элементом языка.
Значок оператора итератора catchall Iterator Общий значок Iterator отображается в тех случаях, когда с помощью логики, управляющей графическими планами Showplan, не удается найти подходящий значок для итератора. Значок общего захвата не обязательно указывает на ошибку. Существует три значка catchall: синий (для итераторов), оранжевый (для курсоров) и зеленый (для конструкций языка Transact-SQL).
Значок оператора " Key Lookup Оператор Key Lookup — это поиск закладок в таблице с кластеризованным индексом. Столбец Argument содержит имя кластеризованного индекса и ключ кластеризация, используемый для поиска строки в кластеризованном индексе. Key Lookup всегда сопровождается оператором Nested Loops . Если в Argument столбце отображается предложение WITH PREFETCH, обработчик запросов определил, что оптимально использовать асинхронную предварительную выборку (упреждающее чтение) при поиске закладок в кластеризованном индексе.

Использование Key Lookup оператора в плане запроса указывает на то, что запрос может извлечь выгоду из настройки производительности. Например, производительность запроса можно повысить, добавив покрывающий индекс.
Значок оператора курсора набора ключей Значок Keyset Оператор Keyset использует курсор, для которого видимыми являются обновления, но не вставки, выполненные другими.
Значок catchall элемента Language Language Element Общий значок Language Element отображается в тех случаях, когда с помощью логики, управляющей графическими планами Showplan, не удается найти подходящий значок для итератора. Значок общего захвата не обязательно указывает на ошибку. Существует три значка catchall: синий (для итераторов), оранжевый (для курсоров) и зеленый (для конструкций языка Transact-SQL).
Значок оператора Lazy Spool Логический оператор Lazy Spool сохраняет каждую строку из входных данных в скрытый временный объект, хранящийся в tempdb базе данных. Если оператор перенапрягается (например, оператором Nested Loops ), но повторная привязка не требуется, вместо повторного сканирования входных данных используются хранимые данные. Если требуется повторная привязка, буферизованные данные удаляются, а объект буфера перестраивается путем повторного просмотра ввода. Оператор Lazy Spool производит отложенное построение своего буферного файла: каждый раз, когда родительский оператор буфера запрашивает строку, оператор буферизации получает строку из своего входного оператора и сохраняет ее в буфер, а не обрабатывает все строки сразу. Lazy Spool — это логический оператор.
Нет Left Anti Semi Join Оператор Left Anti Semi Join возвращает каждую строку первого (верхнего) входа, для которой нет соответствующей строки во втором (нижнем) входе. Если в столбце Argument не существует предиката соединения, каждая строка является соответствующей строкой. Left Anti Semi Join является логическим оператором.
Нет Left Outer Join Оператор Left Outer Join возвращает строки, удовлетворяющие условию соединения первого (верхнего) входа со вторым (нижним) входом. Он также возвращает строки из первого входа, не имеющие соответствия строкам во втором входе. Строки, не имеющие соответствия строкам во втором входе, возвращаются как значения NULL. Если в столбце Argument не существует предиката соединения, каждая строка является соответствующей строкой. Left Outer Join является логическим оператором.
Нет Left Semi Join Оператор Left Semi Join возвращает каждую строку из первого (верхнего) входа, для которой есть соответствующая строка во втором (нижнем) входе. Если в столбце Argument не существует предиката соединения, каждая строка является соответствующей строкой. Left Semi Join является логическим оператором.
Значок оператора " Log Row Scan Оператор Log Row Scan просматривает журнал транзакций. Log Row Scan является логическим и физическим оператором.
Значок оператора " Merge Interval Оператор Merge Interval проводит слияние нескольких (возможно, пересекающихся) интервалов и возвращает минимальный, непересекающийся интервал, который затем используется для поиска записей индекса. Этот оператор обычно отображается над одним или несколькими Compute Scalar операторами Constant Scan над операторами, которые создают интервалы (представленные в виде столбцов в строке), которые этот оператор объединяет. Merge Interval является логическим и физическим оператором.
Значок оператора объединения слиянием Значок Merge Join Оператор Merge Join выполняет внутреннее соединение, левое внешнее соединение, левое полусоединение, левое антиполусоединение, правое внешнее соединение, правое полусоединение, правое антиполусоединение, а также логические операции соединения.

В столбце Argument оператор Merge Join содержит предикат MERGE:(), если операция выполняет соединение "один ко многим", или предикат МНОГИЕ КО МНОГИМ MERGE:(), если операция выполняет соединение "многие ко многим". Столбец Argument также содержит разделенный запятыми список столбцов, используемых для выполнения операции. Оператор Merge Join требует наличия двух входных значений, отсортированных в соответствующих столбцах, что можно сделать с помощью вставки явных операций сортировки в план запроса. Соединение слиянием особенно эффективно в случаях, когда явной сортировки не требуется, например, когда в базе данных имеется подходящий индекс сбалансированного дерева или когда порядок сортировки может использоваться для нескольких операций вроде соединения слиянием или группирования со сведением. Merge Join является физическим.
Значок оператора Вложенные Nested Loops Оператор Nested Loops выполняет логические операции внутреннего соединения, левого внешнего соединения, левого полусоединения и антилевого полусоединения. При соединениях вложенными циклами выполняется поиск во внутренней таблице каждой строки внешней таблицы, обычно с помощью индекса. На основании предполагаемых затрат обработчик запросов определяет, сортировать ли внешние входные данные, чтобы улучшить сосредоточенность поиска по индексу во внутренней таблице. Все строки, удовлетворяющие (необязательно) предикату в Argument столбце, возвращаются в зависимости от выполняемой логической операции. Nested Loops является физическим оператором.
Значок оператора некластеризованного удаления индекса Значок Nonclustered Index Delete Оператор Nonclustered Index Delete удаляет входные строки из некластеризованного индекса, указанного в столбце Argument . Nonclustered Index Delete является физическим оператором.
Значок оператора некластеризованного индекса вставки Index Insert Оператор Index Insert вставляет строки из входных данных в некластеризованный индекс, указанный в столбце Argument . В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца. Index Insert является физическим оператором.
Значок оператора " " Index Scan Оператор Index Scan извлекает все строки из некластеризованного индекса, указанного в столбце Argument . Если в Argument столбце отображается необязательный предикат WHERE:(), возвращаются только те строки, которые удовлетворяют предикату. Index Scan является логическим и физическим оператором.
Значок оператора некластеризованного поиска по индексу Index Seek Оператор Index Seek использует возможности поиска по индексам для получения строк из некластеризованного индекса. Столбец Argument содержит имя используемого некластеризованного индекса. Он также содержит предикат SEEK:(). Подсистема хранилища использует этот индекс для обработки только строк, удовлетворяющих предикату SEEK:(). При необходимости может включаться предикат WHERE:(), в котором подсистема хранилища вычисляет выражение для всех строк, удовлетворяющих предикату SEEK:() (при этом не используются индексы). Argument Если столбец содержит предложение ORDERED, обработчик запросов определил, что строки должны возвращаться в том порядке, в котором некластеризованный индекс отсортировал их. Если предложение ORDERED отсутствует, подсистема хранилища производит поиск индекса оптимальным способом (что не гарантирует сортировки выходных данных). Сохранение сортировки в выводе может оказаться менее эффективным, чем возврат неупорядоченного вывода. Index Seek является логическим и физическим оператором.
Значок оператора очереди некластеризованного индекса Значок Index Spool Физический оператор Index Spool содержит предикат SEEK:() в столбце Argument . Оператор Index Spool сканирует входные строки, помещая копию каждой строки в скрытый файл очереди (хранящийся в tempdb базе данных и существующий только в течение времени существования запроса) и создает на строках некластеризованный индекс. Это позволяет использовать поддерживаемый индексами механизм поиска для вывода только строк, отвечающих требованиям предиката SEEK:(). Если оператор перенапрягается (например, оператором Nested Loops ), но повторная привязка не требуется, вместо повторного сканирования входных данных используются хранимые данные.
Значок оператора некластеризованного обновления индекса Значок Nonclustered Index Update Физический Nonclustered Index Update оператор обновляет строки из входных данных в некластеризованном индексе, указанном в столбце Argument . При наличии предиката SET:() данное значение устанавливается для каждого обновляемого столбца. Nonclustered Index Update является физическим оператором.
Значок оператора вставки Online Index Insert Физический оператор Online Index Insert указывает, что операции создания, изменения и удаления индекса выполняются в сети. То есть данные базовых таблиц по-прежнему доступны для пользователей во время операции с индексом.
None Parallelism Оператор Parallelism выполняет логические операции распределения потоков, сбора потоков и повторного секционирования потоков. Столбцы Argument могут содержать предикат PARTITION COLUMNS:() с разделенным запятыми списком секционированных столбцов. Столбцы Argument также могут содержать предикат ORDER BY:() со списком столбцов для сохранения порядка сортировки во время секционирования. Parallelism является физическим оператором.

Примечание. Если запрос был скомпилирован как параллельный запрос, но во время выполнения он выполняется как последовательный запрос, выходные данные Showplan, созданные с помощью SET STATISTICS XML или с помощью параметра Включить фактический план выполнения в SQL Server Management Studio, не будут содержать RunTimeInformation элемент для Parallelism оператора . В выходных данных SET STATISTICS PROFILE фактическое количество строк и фактическое число выполнений будут отображать нули для Parallelism оператора . Когда возникает любое из условий, это означает, что Parallelism оператор использовался только во время компиляции запроса, а не в плане запроса во время выполнения. Обратите внимание, что иногда планы параллельных запросов выполняются последовательно, если сервер выполняет большое количество параллельных запросов.
Значок оператора параметров" Parameter Table Scan Оператор Parameter Table Scan просматривает таблицу, переданную как параметр текущего запроса. Обычно он применяется для запросов INSERT из хранимой процедуры. Parameter Table Scan является логическим и физическим оператором.
None Partial Aggregate ОператорPartial Aggregate используется в параллельных планах. Он применяется в статистической функции к максимальному числу входных строк, чтобы избежать записи на диск (сброса на диск). Hash Match — единственный физический оператор (итератор), реализующий агрегирование секций. Partial Aggregate является логическим оператором.
Значок оператора курсора запроса на Population Query Оператор Population Query заполняет рабочую таблицу курсора при его открытии.
Значок оператора "" Refresh Query Оператор Refresh Query выбирает текущие данные для строк из буфера выборки.
Значок оператора удаленного удаления Значок Remote Delete Оператор Remote Delete удаляет входные строки удаленного объекта. Remote Delete является логическим и физическим оператором.
удаленный оператор поиска индекса showplan Remote Index Scan Оператор Remote Index Scan просматривает удаленный индекс, указанный в столбце Argument. Remote Index Scan является логическим и физическим оператором.
удаленный оператор поиска индекса showplan Remote Index Seek Оператор Remote Index Seek использует возможности поиска объекта удаленного индекса, чтобы получить строки. Столбец Argument содержит имя используемого удаленного индекса и предикат SEEK:(). Remote Index Seek является логическим физическим оператором.
Значок оператора удаленной вставки Значок Remote Insert Оператор Remote Insert вставляет входные строки в удаленный объект. Remote Insert является логическим и физическим оператором.
Значок оператора удаленного запроса Значок Remote Query Оператор Remote Query отправляет запрос удаленному источнику. Текст запроса, отправляемого на удаленный сервер, отображается в столбце Argument . Remote Query является логическим и физическим оператором.
Значок оператора удаленного сканирования Значок оператора удаленного Remote Scan Оператор Remote Scan позволяет удаленно просматривать необходимые объекты. Имя удаленного объекта отображается в столбце Argument . Remote Scan является логическим и физическим оператором.
Значок оператора удаленного обновления Значок Remote Update Оператор Remote Update обновляет входные строки удаленного объекта. Remote Update является логическим и физическим оператором.
Значок оператора параллелизм повторного секционирования" Repartition Streams Оператор Repartition Streams собирает несколько потоков и создает несколько потоков записей. Формат и содержимое записей не меняются. Если оптимизатор запросов использует фильтр по битовым картам, то число строк в выходном потоке сокращается. Каждая запись из входного потока помещается в один выходной поток. Если оператор настроен для сохранения порядка, то все входные потоки упорядочиваются и сливаются в несколько упорядоченных выходных потоков. Если выходные данные секционированы, Argument столбец содержит предикат PARTITION COLUMNS:() и столбцы секционирования. Если выходные данные упорядочены, Argument столбец содержит предикат ORDER BY:() и упорядоченные столбцы. Repartition Streams — это логический оператор. Он используется только в параллельных планах запроса.
Значок элемента языка результатов Значок Result Оператор Result представляет собой данные, возвращенные в конце плана запроса. Обычно он является корневым элементом инструкции Showplan. Result является элементом языка.
Значок оператора подстановки RID RID Lookup Оператор RID Lookup осуществляет поиск закладки в куче при помощи заданного идентификатора строки. Столбец Argument содержит метку закладки, используемую для поиска строки в таблице, и имя таблицы, в которой выполняется поиск строки. Оператор RID Lookup всегда сопровождается оператором NESTED LOOP JOIN. RID Lookup является физическим оператором. Дополнительные сведения о поиске закладок см. в разделеBookmark Lookupна веб-узле MSDN в блоге SQL Server.
Нет Right Anti Semi Join Оператор Right Anti Semi Join выводит каждую строку второго (нижнего) входного множества, для которой не существует соответствующей строки в первом (верхнем) входном множестве. Соответствующая строка определяется как строка, удовлетворяющая предикату в столбце Argument (если предикат не существует, каждая строка является соответствующей строкой). Right Anti Semi Join является логическим оператором.
Нет Right Outer Join Оператор Right Outer Join возвращает каждую строку, которая удовлетворяет соединению второго (нижнего) входа с первым (верхним). Она также возвращает все строки из второго входа, для которых нет совпадений в первом, соединяя их со значением NULL. Если в столбце Argument не существует предиката соединения, каждая строка является соответствующей строкой. Right Outer Join является логическим оператором.
Нет Right Semi Join Оператор Right Semi Join возвращает каждую строку из второго (нижнего) потока входных данных, если имеется соответствующая строка в первом (нижнем) потоке входных данных. Если в столбце Argument не существует предиката соединения, каждая строка является соответствующей строкой. Right Semi Join является логическим оператором.
Значок оператора spool счетчика строк строк Row Count Spool Оператор Row Count Spool просматривает входные данные, подсчитывая число представленных строк и возвращая такое же количество строк, очищенных от данных. Этот оператор используется, когда необходимо проверить существование строк, а не наличие в них данных. Например, если Nested Loops оператор выполняет операцию левого полусоединения и предикат соединения применяется к внутренним входным данным, в верхней части внутренних входных данных оператора может быть помещена очереди счетчика Nested Loops строк. Nested Loops Затем оператор может определить, сколько строк выводится по очереди количества строк (так как фактические данные из внутренней стороны не требуются), чтобы определить, следует ли возвращать внешнюю строку. ОператорRow Count Spool — это физический оператор.
Значок оператора Segment Segment Segment является физическим и логическим оператором. Он делит входной набор на сегменты в соответствии со значением одного или нескольких столбцов. Эти столбцы отображаются в виде аргументов оператора Segment . Затем оператор выводит по одному сегменту за раз.
Нет Segment Repartition В плане параллельных запросов иногда содержатся концептуальные области итераторов. Все итераторы в рамках такой области могут обрабатываться параллельными потоками. Сами же области должны обрабатываться последовательно. Некоторые итераторы оператора Parallelism внутри отдельной области называются Branch Repartition. Итератор оператора Parallelism на границе двух таких областей называется Segment Repartition. Branch Repartition и Segment Repartition являются логическими операторами.
Значок оператора Последовательности Sequence Оператор Sequence выполняет планы широкого обновления. Практически он выполняет каждый вход по очереди (сверху вниз). Каждый вход обычно является обновлением отдельного объекта. Он возвращает лишь строки, полученные из последнего (нижнего) входа. Sequence является логическим и физическим оператором.
Значок оператора проекта Sequence Project Оператор Sequence Project добавляет столбцы для выполнения вычислений над упорядоченным набором. Он делит входной набор на сегменты в соответствии со значением одного или нескольких столбцов. Затем оператор выводит по одному сегменту за раз. Эти столбцы отображаются как аргументы оператора Sequence Project. Sequence Project является логическим и физическим оператором.
Значок оператора моментального курсора Моментальный Моментальный снимок Оператор Snapshot создает курсор, который не видит изменений, сделанных другими курсорами.
Значок оператора Sort Sort Оператор Sort сортирует все входящие строки. Столбец Argument содержит предикат DISTINCT ORDER BY:(), если дубликаты удаляются этой операцией, или предикат ORDER BY:() с разделенным запятыми списком сортируемых столбцов. Столбцы имеют префикс со значением ASC, если они сортируются по возрастанию, или значением DESC, если сортируются по убыванию. Sort является логическим и физическим оператором.
Значок оператора Split Split Оператор Split используется для оптимизации обработки обновлений. Он разбивает каждую операцию обновления на операции удаления и вставки. Split является логическим и физическим оператором.
Значок оператора Spool Оператор Spool сохраняет промежуточный результат запроса в tempdb базе данных.
Значок оператора агрегата Stream Stream Aggregate Оператор Stream Aggregate группирует строки в один или несколько столбцов и вычисляет одно или несколько агрегатных выражений, возвращенных запросом. Выход этого оператора может быть использован последующими операторами запроса, возвращен клиенту или то и другое. Оператору Stream Aggregate необходимы входные данные, упорядоченные по группируемым столбцам. Оптимизатор использует перед этим оператором оператор Sort, если данные не были ранее отсортированы оператором Sort или используется упорядоченный поиск или просмотр в индексе. В инструкции SHOWPLAN_ALL или графическом плане выполнения в SQL Server Management Studio столбцы предиката GROUP BY перечислены в Argument столбце, а статистические выражения — в столбце Определенные значения. Stream Aggregate является физическим оператором.
Значок оператора switch Параметр ОператорSwitch представляет собой особый тип итератора объединения, который имеет n входов. Выражение связывается с каждым оператором Switch . В зависимости от возвращаемого значения выражения (между 0 и n-1) оператор Switch копирует соответствующий входной поток в выходной поток. В частности, оператор Switch применяется при реализации планов запроса, содержащих быстрые курсоры прямого направления с такими операторами, как TOP . Switch является и логическим, и физическим оператором.
Значок оператора Table Delete Физический Table Delete оператор удаляет строки из таблицы, указанной в столбце Argument плана выполнения запроса.
Значок оператора вставки таблицы Значок Table Insert Оператор Table Insert вставляет строки из входных данных в таблицу, указанную в столбце Argument плана выполнения запроса. В столбце Argument также содержится предикат SET:(), который указывает значение, устанавливаемое для каждого столбца. Если оператор Table Insert не имеет потомков для вставки значений, то вставленная строка берется из самого оператора вставки. Table Insert является физическим оператором.
Оператор слияния таблиц Table Merge Оператор Table Merge применяет поток данных слияния к куче. Оператор удаляет, обновляет или вставляет строки в таблице, указанной в столбце Argument оператора . Фактическая выполненная операция зависит от значения во время выполнения столбца ACTION , указанного в столбце Argument оператора . Table Merge является физическим оператором.
Значок оператора " Table Scan Оператор Table Scan извлекает все строки из таблицы, указанной в столбце Argument плана выполнения запроса. Если предикат WHERE:() отображается в столбце Argument , возвращаются только те строки, которые удовлетворяют предикату. Table Scan является логическим и физическим оператором.
Значок оператора очереди таблицы Значок Table Spool Оператор Table Spool просматривает входную таблицу и помещает копию каждой строки в скрытую буферную таблицу, которая находится в базе данных tempdb и существует только в течение времени жизни запроса. Если оператор перенапрягается (например, оператором Nested Loops ), но повторная привязка не требуется, вместо повторного сканирования входных данных используются хранимые данные. Table Spool является физическим оператором.
Значок оператора обновления таблицы Значок" Table Update Физический Table Update оператор обновляет входные строки в таблице, указанной в столбце Argument плана выполнения запроса. Предикат SET:() определяет значение для каждого обновляемого столбца. Эти значения могут быть упомянуты в предложении SET или в другом месте в этом операторе, а также в каком-либо другом месте в рамках запроса.
Значок оператора функции с табличным значением Значок Table-valued Function Оператор Функции с табличным значением оценивает функцию с табличным значением (Transact-SQL или CLR) и сохраняет результирующие строки в базе данных tempdb . Когда родительские итераторы запрашивают строки, функция с табличным значением возвращает строки из tempdb.

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

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

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



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

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

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

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

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

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

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

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

Расширенный оператор UPDATE XML NODE обновляет XML-узел в расширении изменения данных XQuery в методе modify() для типа XML.
None Union Оператор Union просматривает несколько входов, выводя каждую просмотренную строку и удаляя дубликаты. Union — это логический оператор.
Значок оператора Update (Ядро СУБД) Значок Update Оператор Update обновляет каждую строку из входных данных в объекте, указанном в столбце Argument плана выполнения запроса. Update является логическим оператором. Операторы Table Update, Index Update или Clustered Index Update являются физическими.
Значок элемента Языка While While Оператор While реализует цикл Transact-SQL while. While является элементом языка.
Значок оператора очереди таблицы Значок Window Spool Оператор Window Spool расширяет каждую строку в набор строк, представляющий связанное с ним окно. В запросе предложение OVER определяет окно в наборе результатов запроса, а оконная функция затем вычисляет значения для каждой строки в окне. Window Spool является логическим и физическим оператором.