SQL Server查询计划系列之——逻辑操作符与物理操作符

操作符描述SQLServer如何执行一个查询或数据操作(DML)语句。查询优化器用操作符来建立生成该语句结果集的查询计划,或执行DML语句中确定的操作。查询计划是一个由物理操作符组成的树形结构。用户可以通过SET SHOWPLAN、SSMS(SQL ServerManagement Studio)中图形执行计划选项或SQL Server嗅探器(Profiler)中Showplan事件类来查看查询计划。

 

操作符分为逻辑操作符(LogicalOperators)和物理操作符(Physical Operators)。

1.        逻辑操作符

逻辑操作符描述处理一条语句时所用的关系代数。换言之,逻辑操作符从概念上描述需要执行什么操作。

2.        物理操作符

物理操作符实施逻辑操作符描述的操作。每个物理操作符为一个执行操作的对象或程序。例如,一些物理操作符存取表、索引或视图的列或行。其他物理操作符执行其他类似计算、汇聚、数据完整性检查或连接。物理操作符有与之相关的成本(Costs)。

 

物理操作符初始化、收集数据并关闭。确切讲,物理操作符能回答如下三种方法调用。

1)        Init(): Init() 方法导致一个物理操作符完成自身初始化,并创建任何需要的数据结构。虽然物理操作符可以接收很多Init()调用,但一般来说,一个物理操作符只接收有个Init()。

2)        GetNext(): GetNext()方法导致一个物理操作符获取第一或后续的数据行。物理操作符可以接收零或多个GetNext()调用。

3)        Close(): Close()方导致一个物理操作执行一些清理操作并将其本身关闭。一个物理操作符只能接收有个Close()调用。

 

物理操作符相关注意事项

1)        GetNext()方法返回一行数据,且其被调用次数作为通过SET STATISTICS PROFILE ON或SETSTATISTICS XML ON设置而产生的Showplan输出中的ActualRows出现。

2)        出现于Showplan输出中的ActualRebinds和ActualRewinds指Init()方法被调用的次数。除非一个操作符为循环连接(Loop Join)的内行源,ActualRebinds为1且ActualRewinds为0。如果一个操作符为循环连接的内行源,重新绑定(rebinds)与重绕(rewinds)的和应该等于该循环连接外行源的行数。重新绑定是指连接中一个或多个相关参数改变时内行源必须被重新评估。重绕是指没相关参数改变时可以重用内行源之前的结果。ActualRebinds与ActualRewinds出现于SETSTATISTICS XML ON设置而产生的Showplan输出中。它们仅在Nonclustered Index Spool、Remote Query、Rows CountSpool、Sort、Table Spool和Table-valuedFunction操作中被填充。当StartupExpression属性被设置为TRUE时, ActualRebinds与ActualRewinds在Assert和Filter操作符中也许会被填充。当ActualRebinds与ActualRewinds出现于XMLShowplan中时,它们可以和EstimateRebinds 与EstimateRewinds相比较。当它们并不存在时,则EstimateRows可与ActualRows相比较。注意,当它们不存在时,实际图形Showplan输出中actual rebinds与actualrewinds则显示为0。

3)        相关计数器ActualEndOfScans仅在SETSTATISTICS XML ON设置而产生的Showplan输出中可用。当物理操作符到达其数据流末端时,该计数器将被增加1。物理操作符能到达其数据流末端0、1或多次。就像rebinds和rewinds, 仅当该操作符为循环连接的内行源时,该末端扫描(end of scans)数才可能大于1。末端扫描数应该小于等于rebinds 与rewinds之和。

你可能感兴趣的:(SQL,Server)