sql server 2008执行计划是如何生成的?

0
已邀请:
4

戴俊青 - 微软数据库开发和性能调优 2013-07-23 回答

当一个查询被提交时,SQL SERVER将他传递给关系引擎中的解析器,解析器检查进入的查询语句,验证器语法是否正确,如果发现一个语法错误,则查询被终止。如果是多个查询作为一个批被一起提交,则解析器检查整个语法,并在发现的语法错误时撤销整个语句。如果说这批语句,有多个语法错误,解析器发现第一个后就不会继续。在验证查询语法时,解析器为代数化器生成一个解析树的内部数据结构,解析器和代数化器被统称为查询编译。
解析器生成的解析书被传递到代数化器处理,代数化器解析不同的对象的所有名称,这些检查的对象包括:引用表,列,还有被处理的数据类型,还有检查的聚合的位置。对于同一批提交的语句,与解析不同的是,如果前面语句是正确的,但后面的语句出错,则前面的语句执行,后面的语句被撤销。如果该查询还包含一个隐含的数据转化,规范化进程在查询树种还添加一个正确的步骤,并且该进程还执行一些基于语法的优化。
然后根据查询的复杂度,包括对引用表的可用的索引数量,查询处理树包含的查询可能的多种执行方式。完全比较所有执行查询方式的开销,有时候会花费很多开销。所以为了避免与查询实际执行开销相比花费过高的优化开销,优化器采用不同的技术:无用计划匹配,多阶段优化,并行计划优化。优化器根据查询的复杂度,各种索引以及CPU个数来选择不同的技术去比较,最终生成查询计划保存在计划缓冲中供未来使用。

要回复问题请先登录注册