当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse)、绑定(Bind)、查询优化(Optimization,有时候也被称为简化)、执行(Execution)。除去执行步骤外,前三个步骤之后就生成了执行计划,也就是SQL Server按照该计划获取物理数据方式,最后执行步骤按照执行计划执行查询从而获得结果。
查询优化器对输入的 T-SQL 查询语句通过”计算”而选择出效率最高的一种执行方案,这个执行方案就是执行计划。
执行计划可以告诉你这个查询将会被如何执行或者已经被如何执行过,可以通过执行计划看到 SQL 代码中那些效率比较低的地方。
查看执行计划的方式我们可以通过图形化的界面,或者文本,或者XML格式查看,这样会比较方便理解执行计划要表达出来的意思。
当一个查询被提交到 SQL Server 后,服务器端很多进程实际上要做很多事情来确保数据出入的完整性。
对于 T-SQL 来说, 处理的主要有两个阶段:关系引擎阶段(
relational engine
)和存储引擎阶段(
storage engine
)。
关系引擎主要要做的事情就是首先确保 Query 语句能够正确的解析,然后交给查询优化并产生执行计划,然后执行计划就以二进制格式发到存储引擎来更新或者读取数据。
存储引擎主要处理的比如像锁、索引的维护和事务等
所以对于执行计划,重点的是关注关系引擎。
MSDN Book Online
随时查
下表表示一下常见的执行计划元素
操作符分为阻断式
blocking
和非阻断式
non-blocking