浅析SQL Server查询优化器的工作原理

发表于:2012-4-05 10:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:AgileSharp    来源:51Testing软件测试网采编

  SQL Server的查询优化器是一个基于成本的优化器。它为一个给定的查询分析出很多的候选的查询计划,并且估算每个候选计划的成本,从而选择一个成本最低的计划进行执行。实际上,因为查询优化器不可能对每一个产生的候选计划进行优化,所以查询优化器会在优化时间和查询计划的质量之间进行一个平衡,尽可能的选择一个“最优”的计划。

  所以,查询优化器成为SQL Server中最重要的一个组件,并且影响着SQL Server的性能。选择正确或错误的执行计划意味着查询执行时间可能存在着毫秒的,几分钟,甚至几个小时之间的差异。

  了解查询优化的内部机制,可以帮助DBA和开发人员能够编写更好的查询,或者给查询优化器提供信息使得它可以产生有效的执行计划。本系列文章讲述的查询优化器的内部运作的知识,此外,还会告诉你如何使用查询优化器的相关信息进行性能诊断。

  下面,我们首先来看看:查询优化器是如何工作的。

  在SQL Server数据库引擎的核心是两个主要部分组成:存储引擎和查询处理器(也被称为关系引擎)。存储引擎负责在磁盘和内存之间以最优化的方式读取数据,同时维护数据的完整性。查询处理器,顾名思义,接受提交给SQL Server所有的查询,并且为产生他们的最佳执行计划,然后执行该计划,并提供所需的结果。

  我们将查询以T-SQL的形式提交给SQL Server。因为SQL语句是一个高层抽象的声明性的语言,它仅仅只是定义了要从数据库中获取什么样的数据,而没有告诉如何去获取这些数据(或者说,没有定义获取数据的方法和步骤)。所以,对于SQL Server所接受到的每一个查询,查询处理器的首要任务就是产生一个计划,这个计划就描述了如何去执行查询,之后就由存储引擎去执行这个计划了。

  为了确保已经达到在查询处理器认为是最好的计划执行查询,查询处理器执行不同的步骤,整个查询处理过程如图所示:

  当然,上面的图只是一个最简单的示例图,下面,给大家看另外一个图,体会一下一个查询处理的过程:

  我们在后续的文章中会看到每一个步骤的详细讲解与应用,下面我们就简单的介绍图中的一些步骤(为了简单起见,我们以第一幅图为例子)

  1、Parsing 和Binding(解析与绑定):在一个查询提交给了数据库之后,首先就要被进行语法的解析,如果这个查询的语法是没有问题的,那么这个Parsing过程的输入结果就是一个逻辑树,在这个逻辑树种每一个节点都表示了这个查询进行的每个操作,例如读取某个表,进行inner join等。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号