Справочник по логическим и физическим операторам
Операторы описывают, как 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 связан с вызовом физического оператора.
Сопоставление физических и логических операторов
Оптимизатор запросов создает план запроса в виде дерева логических операторов. После этого оптимизатор запросов выбирает наиболее эффективный физический оператор для каждого логического. Оптимизатор запросов использует подход, основанный на стоимости, чтобы определить, с помощью какого физического оператора будет реализован логический.
Обычно логическую операцию можно реализовать с помощью нескольких физических операторов. Однако в редких случаях физический оператор может реализовывать несколько логических операций.
В этом разделе
Этот раздел содержит описания следующих логических и физических операторов.
|
См. также
Справочник
Графическое отображение планов выполнения (SQL Server Management Studio)
Основные понятия
Отображение планов выполнения с помощью параметров Showplan инструкции SET (Transact-SQL)