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