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

Операторы описывают, как Microsoft SQL Server выполняет запрос или инструкцию языка DML. Оптимизатор запросов использует операторы для построения плана запроса, чтобы создать результат, заданный в запросе, или произвести операцию, указанную в инструкции DML. План запроса — это дерево физических операторов.

Операторы классифицируются как логические и физические. Логические операторы описывают реляционные операции обработки запросов на концептуальном уровне. Физические операторы фактически реализуют операцию, определенную логическим оператором, используя конкретный метод или алгоритм. Например, «join» — это оператор логический, а «nested loops joins» — физический.

  • Логические операторы
    Логические операторы описывают операции реляционной алгебры, используемые для обработки инструкции. Другими словами, логические операторы описывают на концептуальном уровне, какие действия следует совершить.
  • Физические операторы
    Физические операторы реализуют действия, описанные логическими операторами. Каждый физический оператор является объектом или процедурой, выполняющей операцию. Например, некоторые физические операторы обращаются к столбцам и строкам таблицы, индекса или представления. Другие физические операторы выполняют другие типы операций: Оператор Aggregate вычисляет выражения с функциями MIN, MAX, SUM, COUNT или AVG, а оператор Merge Join выполняет различные типы логических операций соединения.

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

    • 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. Они заполнены только для операторов Nonclustered Index Spool, Remote Query, Row Count Spool, Sort, Table Spool и Table-valued Function. Счетчики ActualRebinds и ActualRewinds могут быть заполнены также для операторов Assert и Filter, когда атрибут StartupExpression установлен в TRUE.

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

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

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

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

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

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

В этом разделе

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

Aggregate

Log Row Scan

Arithmetic Expression

Merge Interval

Assert

Merge Join

Assign

Nested Loops

Async Concat

Nonclustered Index Update

Bitmap

Nonclustered Index Spool

Bitmap Create

Nonclustered Index Seek

Bookmark Lookup

Nonclustered Index Scan

Branch Repartition

Nonclustered Index Insert

Broadcast

Nonclustered Index Delete

Cache

Online Index Insert

Clustered Index Delete

Parallelism

Clustered Index Insert

Parameter Table Scan

Clustered Index Scan

Partial Aggregate

Clustered Index Seek

Population Query

Clustered Index Update

Refresh Query

Collapse

Remote Delete

Compute Scalar

Remote Insert

Concatenation

Remote Query

Constant Scan

Remote Scan

Convert

Remote Update

Cross Join

Repartition Streams

Cursor Catchall

Result

Declare

RID Lookup

Delete

Right Anti Semi Join

Deleted Scan

Right Outer Join

Distinct

Right Semi Join

Distinct Sort

Row Count Spool

Distribute Streams

Segment

Dynamic

Segment Repartition

Eager Spool

Sequence

Fetch Query

SequenceProject

Filter

Snapshot

Flow Distinct

Sort

Full Outer Join

Split

Gather Streams

Spool

Hash Match

Stream Aggregate

Hash Match Root

Switch

Hash Match Team

Table Delete

If

Table Insert

Inner Join

Table Scan

Insert

Table Spool

Inserted Scan

Table Update

Intrinsic

Table-valued Function

Iterator Catchall

Top

Key Lookup

Top N Sort

Keyset

UDX

Language Element Catchall

Union

Lazy Spool

Update

Left Anti Semi Join

While

Left Outer Join

Логический и физический операторы Cursor

Left Semi Join

 

См. также

Справочник

Графическое отображение планов выполнения (SQL Server Management Studio)

Основные понятия

Отображение планов выполнения с помощью параметров Showplan инструкции SET (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005