摘要:Microsoft SQL Server 从版本 7.0 开始使用内置位图来提高执行查询的速度。通过在 SQL Server 2000 中引入新的运算符,可以将进一步的位图筛选技术应用于源自大型数据集的、更快速的查询结果。
简介 本文首先介绍了在 Microsoft® SQL Server 7.0 的查询优化中位图的使用,然后介绍了它们在 SQL Server 2000™ 中增强的应用。
SQL Server 7.0 Microsoft SQL Server 7.0 在所有的散列联接中无提示使用位图。散列联接包含创建和探测两个阶段。在创建阶段,其中一个已联接的表(也称为外部表)的所有联接键都被分布到一个散列表中。作为该散列操作的副产品,SQL Server 将生成一个独立的位图,其中“0”表示“外部表中没有键值分布到该位”,“1”表示“外部表中有一个或多个键值分布到该位”。
SQL Server 2000 Microsoft SQL Server 2000 非常有效地使用了类似的位图,不仅在内部散列联接中使用,而且还用于外部联接运算符以删除包含不能生成任何联接记录的键值的行。在创建位图的显示方案输出中,有一个“Bitmap Create”运算符。在查询优化过程中,位图被自动引用到查询计划中。以下查询示例便使用了包含这些位图的计划:
SELECT S_NAME, S_ADDRESS ,S_PHONE ,S_COMMENT ,PS_PARTKEY FROM SUPPLIER ,PARTSUPP WHERE S_SUPPKEY = PS_SUPPKEY AND PS_PARTKEY between 5000 AND 5999
SQL Server 2000 只在并行查询计划中使用这些位图。这是因为如果没有交换运算符,则在散列联接中的位图上没有额外的补偿。除了上述使用散列联接的方案外,SQL Server 2000 还在合并联接中使用这些位图,但仍然只限于并行计划,并且在外部分支上存在 SORT 运算符。SORT 运算符使 SQL Server 在处理内部表中的行之前先处理所有外部行,因此使我们可以创建位图。如果在外部分支上没有 SORT 运算符,将同时处理合并联接中来自内部表和外部表中的行,这样就不能使用位图了。