Microsoft SQL Server 2000 中的位图[MSSQL防范]
本文“Microsoft SQL Server 2000 中的位图[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
简介
本文首先介绍了在 Microsoft® sql server 7.0 的查询优化中位图的利用,然后介绍了它们在 SQL Server 2000™ 中加强的利用.www.yestar2000iTbulo.comUqEKBQT
SQL Server 7.0
Microsoft SQL Server 7.0 在全部的散列联接中无提醒利用位图.散列联接包含成立和探测两个阶段.在成立阶段,此中一个已联接的表(也称为外部表)的全部联接键都被分布到一个散列表中.作为该散列操作的副产品,SQL Server 将生成一个独立的位图,此中“0”表示“外部表中没有键值分布到该位”,“1”表示“外部表中有一个或多个键值分布到该位”.www.yestar2000iTbulo.comUqEKBQT
位图的大小是在按照外部表中唯一值的数目而举行的优化查询历程中决意的.一旦外部表中全部的行都被散列后,位图就由 0 和 1 构成.然后将利用与处理外部键相同的散列算法对探测表(也称为内部表)中的每个键举行分布.www.yestar2000iTbulo.comUqEKBQT
在查抄和搜索成立阶段的散列表之前,我们将先查抄位图.假如对应的条目为“0”,则该行在外部表中不大概有匹配值,因此将被丢弃.www.yestar2000iTbulo.comUqEKBQT
由于搜索位图要比搜索散列表更经济,处理不生成联接记录的内部表中的行要比处理不带位图的行快.由于位图是散列联接不可分割的一部份,因此位图将自动成立并且不会显示在显示筹划的输出中.www.yestar2000iTbulo.comUqEKBQT
SQL Server 2000
Microsoft SQL Server 2000 非常有效地利用了近似的位图,不但在内部散列联接中利用,并且还用于外部联接运算符以删除包含不能生成任何联接记录的键值的行.在成立位图的显示筹划输出中,有一个“Bitmap Create”运算符.在查询优化历程中,位图被自动引用到查询筹划中.以下查询示例便利用了包含这些位图的筹划:www.yestar2000iTbulo.comUqEKBQT
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 生成的显示筹划图解.www.yestar2000iTbulo.comUqEKBQT
www.yestar2000iTbulo.comUqEKBQT
图 1:示例查询的履行筹划图解www.yestar2000iTbulo.comUqEKBQT
关于每个数据流,位图都在联接的外部输入端上的散列联接之前成立.从左至右和从上至下查看上面的显示筹划图解,将发现 PARTSUPP 表的扫描是并行的.背面的交换运算符 (Parallelism/Repartition Streams) 利用键值分配行,这样它们将在并行的散列匹配(联接)之前被置于包含 SUPPLIER 表的再分配行的对应流中.先履行顶部份支,直至散列联接的散列表被填充,底部份支没有活动为止.www.yestar2000iTbulo.comUqEKBQT
在扫描 SUPPLIER 表时,我们已利用 PARTSUPP 键(在本查询中为 PS_SUPPKEY 列)在顶部份支上成立了位图.每一个进入散列联接的流都有一个位图.当 SUPPLIER 行在扫描后输入交换运算符时,我们首先要判断它们将进入哪一个流.假如在对应于键值(S_SUPPKEY 列)的项目中该行的位图包含“0”,则丢弃该行.因此,在被置于得当的交换输出流之前,不符合条件的行将被删除.www.yestar2000iTbulo.comUqEKBQT
SQL Server 2000 只在并行查询筹划中利用这些位图.这是因为假如没有交换运算符,则在散列联接中的位图上没有额外的补偿.除了上述利用散列联接的筹划外,SQL Server 2000 还在归并联接中利用这些位图,但仍旧只限于并行筹划,并且在外部份支上存在 SORT 运算符.SORT 运算符使 SQL Server 在处理内部表中的行之前先处理全部外部行,因此使我们可以成立位图.假如在外部份支上没有 SORT 运算符,将同时处理归并联接中来自内部表和外部表中的行,这样就不能利用位图了.www.yestar2000iTbulo.comUqEKBQT
测试后果显示速度的提高
普通,由于采取位图而产生的性能提高取决于被挑选出的行数.该数目是可以改变的,因此按照查询履行中其他运算符的开销的差别,速度提高的幅度可以从小到无法丈量到非常明显.www.yestar2000iTbulo.comUqEKBQT
图 2 显示了在大型数据库(134 GB 的表,45 GB 的索引)中测试三种复杂查询时所察看到的速度提高.测试是在实行室中利用 RAM 为 4 GB 的 8 路 550 MHz 计算机完成的. www.yestar2000iTbulo.comUqEKBQT
- 查询 A 为包含后果汇总和排序的三个表(最大的表大约包含 100 GB 数据)的联接查询.
- 查询 B 为包含相关子查询的查询.
- 查询 C 为在联接顶部包含汇总的六个表的联接查询.
图 2:位图挑选对三个大型数据库的复杂查询的优化www.yestar2000iTbulo.comUqEKBQT
结论
在查询优化历程中利用位图是 SQL Server 2000 采取的众多技术之一,旨在从大型数据集(如企业数据库中的数据集)中最快的获得查询后果.通过削减需求处理的行数,使内部联接和外部联接查询更有效,疾速返回数据的同时还削减了服务器处理的工作量.www.yestar2000iTbulo.comUqEKBQT
以上是“Microsoft SQL Server 2000 中的位图[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |