分类: Sybase
2008-04-23 08:44:18
来源:赛迪网 作者:艾文 |
Sybase IQ服务器的核心由于采用了正在申请专利的Bit-Wise索引技术,它在处理复杂的即席查询时,能比传统的B-Tree索引能提高响应速度10~100倍。
对B-Tree及Bit-Map索引的简要回顾
1.传统的B-Tree(平衡树)索引是通过跟踪一个选择的数据字段的值和直接指向包含该数据项的数据页的方式来提供快速查找数据记录。
传统的B-Tree 树索引
若为一个特定的客户查找信息记录就只有快速读取索引,然后直接定位到包含该客户信息的数据页中。索引方式通过直接指向相关信息来消除高代价的表扫描。
B-Tree非常适合于查找并取回少量的行。但对典型的数据仓库的复杂交互式查询应用B -Tree有三个缺点:
首先,B-Tree只在索引是高度可选择(Highly Selective)又称之为高基数(Cardinality )的时候才有价值,对一些唯一值极少的(低基数)数据字段就几乎毫无价值。
B-Tree索引第二个限制是在数据仓库中构造和维护索引的代价。
由于B-Tree索引包含实际数据和其他信息(如指针等),因而使得索引需占用一定的空间和时间。如果构造所有相关的索引,数据仓库就会占据2~4倍原始数据空间。当成批插入删除时,索引就非常敏感,有可
能失去平衡并降低性能。通常说来,10%~15%的数据修改会导致重建索引。
最后,B-Tree索引设计用于简单查询及已知公共存取路径的环境下才有优点,而在数据仓库应用中,通常是复杂的查询,并经常带有分组及聚合条件。此时,B-Tree索引往往是无能为力。
2.Bit-Map(位图)索引和使用B-Tree相比,位图为每个记录的名字段用给定真或假("1"或"0")的方式表示。
传统的位图索引突破了B-Tree索引的一些限制。位图索引可以非常有效地对低基数数据进行索引,但位图式索引却不适用于高基数数据,在聚集数据、完成关系联结和取回原始数据值等方面的效率不高。
Bit-Wise的索引技术特点
1.Sybase IQ在存储数据的方式上与传统的RDBMS完全不同,它不是以"记录行"而是按"列"为单位来存储数据。即所谓的"对数据进行垂直分割",它在Bit-Map索引基础上扩充存放了该字段中的不同取值,
一般的DSS查询往往仅涉及大量数据记录中的少数列,因而不需访问原始数据就能快速获得查询结果。显然,利用这些不同取值也就能快速地进行数据聚集、分组、求最大值、最小值及平均值等。它弥补了位图式索引不适用于高基数数据的缺点。
2.由于列数据比行数据更易进行压缩,因而Sybase IQ以压缩方式存放原始数据时可节省50%的磁盘空间,在获取查询结果数据时减少了I/O次数,响应速度自然加快。
3.Sybase IQ采用操作系统级的并行处理机制,因而像分类、Bit-Map操作及I/O操作都可由操作系统独立地进行调度以消除瓶颈,进而在数据加载时其能充分利用SMP环境中多CPU的资源潜力。
Bit-Wise"数据驱动的"索引机制在Sybase IQ中对每个字段所建索引的类型和个数主要是取决于其数据的特征和经常被使用的情况而不是针对某组特定的查询(后者被称为"查询驱动的"索引机制)。Bit-
Wise索引是"数据驱动的",因而无需DBA为各种查询分别考虑优化策略。
Sybase IQ支持的主要索引类型为:
·LowFast-LF(低基数)
·HighGroup-HG(高基数)
·HighNonGroup-HNG(高基数)
·FastProjiectinFP
建立Bit-Wise索引的一般原则:
(1)在每个列上都建FP索引;
(2)在唯一值<1000的字段上建立LF索引;
(3)在参加连接的字段上建HG或LF索引;
(4)唯一值>1000且用在GROUP BY,SELCT DISITICT,COUNT DISITICT中的字段上建立HG索引;
(5)此外的其它列若出现在where条件中或聚集运算中,则建立HNG索引。
Sybase IQ可利用预连接技术来提高即席查询速度
Sybase IQ支持两类连接处理:一类是即席连接(在查询时处理);另一类是预连接(在加载时处理)。大多数应用是二者的结合。即席连接适用于多对多的联系,被连接的表之间的尺寸差别超过10倍。
预连接适用于一对多的联系,被连接的表之间的尺寸差别不大于10倍,如:等值或左、右外连接。但预连接将导致增大存储量并降低加载速度。
Sybase IQ能对已建立了HG或LF索引的列,再利用"Joined Indexset"完成预连接处理。它通常能使查询速度提高10倍以上。
设置Sybase IQ的基本步骤:
在安装Sybase IQ产品之后:
1.建立与Sybase IQ Indexspace相关的SQL Server基础数据库,Indexspace是SybaseIQ 用于存储索引结构和部分数据的原始设备(rawdevices)或系统文件;
2.建立同基础数据库同名的Sybase IQ Indexspace,最大为2GB,I/O块同压缩比有关,调节范围512B到32KB;
3.在基础数据库上建表;
4.运行Sybase IQ的存储过程,估算所需空间;
5.为表中的某列或所有列建立Sybase IQ Indexsets,Indexsets是Sybase IQ存储表中某列索引空间的,它存储于Indexspace中;
6.定义不同Sybase IQ的索引类型,(每列都建立一个FP索引然后酌情建立别种索引);
7.往Sybase IQ Indexset中加入新数据,从相关的数据库中插入数据到Sybase IQ Inde xes或利用ASCII文件加载;
8.建立供预连接用的Joined Indexset;
9.往Joined Indexset中加入新数据。
现在已可通过Isql或其他前端工具查询Sybase IQ数据了。
测试比较
经实际的测试后,Sybase IQ的效果良好。 |