ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQLServer关系引擎

SQLServer关系引擎

原创 Linux操作系统 作者:hwtong 时间:2011-12-07 21:54:26 0 删除 编辑
关系引擎又称为查询处理器,它包含的SQLServer组件用于确定查询需要完成的任务,以及如何实现的最佳方案.关系引擎包含两个主要的部分:查询优化和查询执行.查询优化器也许是查询处理器中最复杂的组件,甚至是整个SQLServer产品中最复杂的组件,它用户确定批处理中查询的最佳执行方案.
另外,当关系引擎从存储引擎中请求数据和处理返回结果时,它还管理查询的执行过程.关系引擎和存储引擎间的通信一般通过OLEDB行集(row set)实现.存储引擎包含需要真正访问和修改磁盘数据的组件.
1.        命令解析器
命令解析器用户处理发往SQLServer的T-SQL语言事件.它检查语法的正确性,并将T-SQL命令转换成可以进行操作的内部格式.这种内部格式称为查询树.如果解析器无法识别语法,将立即引起语法错误,并标示出现错误的位置.不过,非语法错误消息不能明确显示引起错误的源行.因为只有命令解析器可以访问语句源代码,真正执行命令时,源代码格式中的语句将不再有效.
2.        查询优化器
查询优化器从命令解析器中获取查询树,并为执行查询准备查询树.无法优化的语句,如控制流和数据定义语言命令,将被编译成内部形式.可优化的语句将被做上标记,然后传递到查询优化器中.查询优化器主要涉及数据操作语言语句SELECT,INSERT,DELETE和UPDATE,这些语句可以按多种方式进行处理,查询优化器将从许多可能的方式中选择一种最佳方式.查询优化器将编译整个命令批处理,优化可优化的查询,并检查安全性.该查询优化和编译将产生一个执行计划.
产生该计划的第一步是规范每个查询,该过程可以将单个查询分解成多个细化的查询.查询优化器规范查询后,将对查询进行优化,这意味着它将为执行查询确定计划.查询优化是基于成本的,查询优化器基于内部指标选择消耗最少的计划,内部指标包括评估内存需求,CPU利用率和需要的IO数目.查询优化器将根据请求语句类型,检查各种相关表中的数据量,查看每个表中可用的索引,然后查看查询中引用的每个索引或列的数据值采样.数据值采样名为分发统计信息.根据可用的信息,查询优化器分析查询中各种可用的访问方法和处理策略,并选择成本效益最高的计划.
查询优化器还可以使用修剪启示法算法,以确保优化查询的时间不会比简单选择并执行计划花费的时间长.查询优化器不需要执行详尽的优化.某些产品考虑每种可能的计划,并选择成本效益最高的计划.详尽优化的优点是,无论用户使用什么语法,查询语法的选择在理论上不会引起性能区别.但是使用复杂查询时,评估每种可能的计划花费的时间比接受并执行一个好计划花费的时间要长得多.
完成规范化和最优化之后,这些过程产生的规范化树将被编译成执行计划.执行计划实际上是一种数据结构.执行计划中的每个命令精确指定了将涉及哪些表,将使用哪些索引,将检查哪些安全性,以及哪些条件在选择中的值必须为TRUE.这种执行计划表面上看视乎很简单,但其实内部过程相当复杂.除了实际的命令,执行计划还包括所有必须执行的步骤,以确保对约束条件进行检查.调用触发器的步骤和验证约束条件略有不同.如果操作行为中已经包含了触发器,还需要追加包含触发器的过程调用.如果触发器是instead-of触发器,触发器计划的调用将替换实际的数据修改命令.对after触发器而言,触发器计划在修改语句激活触发器之后和提交修改之前执行.与约束条件验证步骤不同的是,触发器的特定步骤没有编译到执行计划中.向包含多个约束条件的表插入一行的简单请求可以导致执行计划访问多个其他表,或者计算表达式的操作.另外,触发器的存在还可以导致更多步骤的执行,执行真正的insert语句的步骤也许只是整个执行计划的一小部分,但整个执行计划需要确保执行所有与添加一行相关的操作和约束.
3.        查询执行器
查询执行器运行查询优化器产生的执行计划,在执行计划中充当所有命令的调度程序.批处理完成之前,该模块将逐步跟中执行计划的每个命令.大多数命令需要与存储引擎进行交互来修改或检索数据以及管理事务和锁.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16754036/viewspace-712902/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 存储引擎
请登录后发表评论 登录
全部评论

注册时间:2009-07-06

  • 博文量
    116
  • 访问量
    281952