引言
Microsoft® SQL® Server 版是 Microsoft 数据库产品的定义版本它建立在 Microsoft SQL Server 版所确立的坚实基础之上用户的需要和要求推动了 SQL Server 中重大的产品创新作为 Microsoft Windows® 操作系统系列产品最佳的关系数据库管理系统 (RDBMS)SQL Server 是各个领域的公司用户和独立软件商 (ISV) 的正确选择
本文对 SQL Server 查询处理器中的创新和改进进行了描述SQL Server 查询处理器是数据库服务器中接受 SQL 语法确定如何执行该语法以及执行选择的计划的部分与其它商业上可用的 RDBMS 产品相比SQL Server 是重大创新的源泉
在简要介绍查询处理器作用类型及查询处理组件之后将讨论以下主题
Microsoft SQL Server 的目标
查询执行
查询优化
分布式查询
处理查询
有关详细信息请参见存储引擎白皮书(文档编号 )英文网址为
关系数据库由许多部分组成但是在它的核心部分有两个主要组件存储引擎和查询处理器存储引擎将数据写入磁盘并从磁盘读取数据它管理记录控制并发性并维护日志文件
查询处理器接受 SQL 语法确定如何执行该语法并执行选择的计划用户或程序与查询处理器交互而查询处理器与存储引擎交互注意查询处理器将用户与执行的详细情况隔离开用户决定结果查询处理器确定该结果是如何获得的
查询处理有两个主要阶段查询优化和查询执行
查询优化是选择执行得最快的计划的过程在优化阶段查询处理器选择
如果有索引的话使用哪些索引
执行联接的顺序
类似 WHERE 子句的约束的应用顺序
根据从统计数据导出的成本核算信息采用哪些算法有望达到最佳性能
查询执行是执行在查询优化过程中所选择的计划的过程查询执行组件还确定查询优化器可用的技术例如SQL Server 既实现哈希联接算法也实现和合并联接算法两种都是查询优化器的可用算法
查询优化器是关系数据库系统的大脑尽管几乎任何任务都能够手动完成但是查询处理器使关系数据库能够漂亮而有效地完成工作
作为一个类比设想两个建筑公司两个公司都接到了建筑一所房屋的任务要建筑的房屋必须达到一定大小而且必须有一定数量的窗户一定数量的卧室和盥洗室一个厨房等等第一家公司在开始工作之前先制定计划他们确定所需步骤的顺序哪些步骤可以同时进行哪些步骤取决于其前的步骤以及哪些工人最适合执行不同的任务第二家建筑公司没有作计划他们随便捡起手头儿现有的工具就开始施工了
除非任务很简单(而建一个房子通常不是简单的事)否则事先作计划的公司更有可能先完成同样的原因带有较完善的查询优化器的关系数据库更有可能比带有简单查询优化器的关系数据库以更快的速度完成查询特别是复杂的查询
可用工具的类型也决定了一项工作的执行速度而且在某种意义上讲决定能够应付什么样的工作例如自动倾卸卡车对于建造房屋来说可能是合适的工具但是对清理花园来说就不合适与之类似关系数据库必须不仅只有一个完善的查询优化器还必须有查询执行的正确的可用工具而且必须为工作选择正确的工具
在关系数据库中有两种主要的查询优化器类型基于语法的查询优化器和基于开销的查询优化器
基于语法的查询优化器
基于语法的查询优化器为获得对 SQL 查询的应答结果创建一个过程计划但是它选择的特定计划取决于查询的确切语法及查询中的子句顺序无论数据库中记录的数目或组合是否随时间变化而更改基于语法的查询优化器每次都执行同样的计划与基于开销的查询优化器不同它不查看或维护数据库的统计记录
基于开销的查询优化器
基于开销的查询优化器在备选计划中选择应答 SQL 查询的计划选择是基于对执行特殊计划的开销估算(I/O 操作数CPU 秒数等等)而作出的它通过记录表或索引中记录的数目和构成的统计数字估算这些开销与基于语法的查询优化器不同它不依赖于查询的确切语法或查询中的子句顺序
SQL Server 和 SQL Server 都实现了基于开销的查询优化器SQL Server 在查询优化器和查询执行引擎的完善性方面提供了可观的改进