标题: Microsoft SQL Server 2000 中的位图 [打印本页] 作者: 12345 时间: 2009-2-7 10:44 标题: Microsoft SQL Server 2000 中的位图 摘要: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”表示“外部表中有一个或多个键值分布到该位”。
位图的大小是在根据外部表中唯一值的数量而进行的优化查询过程中决定的。一旦外部表中所有的行都被散列后,位图就由 0 和 1 组成。然后将使用与处理外部键相同的散列算法对探测表(也称为内部表)中的每个键进行分布。
在检查和搜索创建阶段的散列表之前,我们将先检查位图。如果对应的条目为“0”,则该行在外部表中不可能有匹配值,因此将被丢弃。
由于搜索位图要比搜索散列表更经济,处理不生成联接记录的内部表中的行要比处理不带位图的行快。由于位图是散列联接不可分割的一部分,因此位图将自动创建并且不会显示在显示方案的输出中。
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
该查询从 SUPPLIER 表中选择所有供应商,这些供应商生产 5000 系列中的所有部件(部件键值在 5000 到 5999 之间)。除 SUPPLIER 表外,我们还使用 PARTSUPP(部件供应商)表,它包含了(针对每个部件)生产同一部件的不同供应商的所有记录。图 1 显示了由 SQL Server 2000 生成的显示方案图解。