上一篇 | 下一篇

如何为非传统数据实现索引扩展

发布: 2008-7-01 13:43 | 作者: admin | 来源: | 查看: 0次

如何为非传统数据实现索引扩展

热 荐

【字体:小 大】

如何为非传统数据实现索引扩展

作者:- 文章来源:- 点击数:1186 更新时间:2006-4-22

Magnus Pierre, Extender 开发专家, IBM

Kevin Foster, 经理,Extenders and DataBlade Development, IBM

2004 年 4 月 本文为您提供了理解和开发索引扩展所需的全部内容,包括涉及哪些部分,以及这些部分如何组合到一起。本文还谈到为了成功地构建一个索引扩展,您需要做些什么。

简介

在诸如生命科学、图像处理和空间数据管理之类领域中的应用程序,需要更复杂的数据类型,而不仅仅是简单的字母数字(alphanumeric)数据类型,比如传统数据处理应用程序中用到的那些数据类型。IBM DB2 UDB 通过其用户定义结构类型(User-Defined Structured Type)功能为这种复杂数据类型提供了支持。相应地,我们可能需要通过基于这些复杂数据类型的索引来增强应用程序性能。本文为创建用于使用用户定义结构类型的扩展索引提供了一个完整的实例。

索引,数据库性能的关键

谈到数据库,就不得不提索引(index)和建索引(indexing)。IBM 得感谢关系数据库背后的理论。这样的理论本身就很优美。通过将数据拆成小块,在合适的时候我们又可以无约束地将数据重新组合起来(而不像数据库模型那样,为保证数据的质量而定义一些约束)。 关系模型中的关键思想是,尽可能地放宽用户可以对数据集使用的查询类型,而不让数据的组织形式控制用户请求的查询类型。

随着数据集的增大,我们要想轻松一些,索引就成为一种关键的工具。不过,建索引并不能解决所有问题,实际上还有一些其他的工具可用于发现某一特定的数据集,例如 Hash Joins 的 IBM DB2 实现。索引基本上就是通往数据的快捷路径。索引的创建是这样的:为每一个要建索引的列值生成一个惟一或者半惟一的键,并将之存储起来。然后在内部将这些键组织到一棵树中,以便尽可能地减少查找某一特定键和特定行时所需的步骤。关于树和树存储的令人关心的事情是:为了能够存储大量的数据,至少需要多少层的树。

在 IBM DB2 中建索引

DB2 Universal Database 是一个非常强大的面向对象的数据库引擎,它通过 Btree 实现为索引提供了非常有效的实现。索引总是索引于一个表中的数据列。列总有一个数据类型,表明可以将什么样的数据存储到此列中,对于这种类型的操作哪些是受支持的,等等。对于数据类型的更一般的定义是:它是一个对象/变量,具有一组属性,并且有一个内部的值/状态。作为类型的一部分,还有一组定义好的针对这种类型的操作,这些操作可以修改内部的值/索引。针对某种类型的最常见的操作是赋值(assignment)、比较(comparison)、加(addition)和减(subtraction)。有时候,我们对某种类型的理解是不可能撇开针对该类型的操作的,所有基本数据类型(但不限于此),例如整数(integer)、浮点数(float)、十进制数(decimal)和字符(char)都属于这样的类型。 例如,假如我要解释整数,我可能会提到:整数就是所有的数字;它们可以相加、相减、相乘,以及比较是否相等。而对于长数据类型,Clob 和 Blob,它们具有通用的格式,用于存储任意数据,存储大量与数据类型关系不大的信息,要定义对这些类型的操作就比较困难了。对于 Clob 和 Blob 类型,也许还可以定义一个相等操作符,例如两个相互比较的 Blob 含有相同的数据,但是对于那种类型,是否可能定义一个通用的大于或等于操作符呢?从基本数据类型到通用存储数据类型,这是一个很大的逻辑上的跳跃,因为 Clob 和 Blob 都只是有一定大小的容器而已。

在 IBM DB2 中可以对哪些类型建索引?

IBM DB2 可以通过使用 Btree 索引对基本数据类型建索引。要建索引的列数据类型组合的长/宽不能大于 1024 字节。而且要建索引的列必须以基本非长数据类型定义。其原因是,在 IBM DB2 中每一种基本长数据类型都缺乏用于定义这种类型的两个变量实例如何相互比较的操作符。这一类的操作符有等于 (=)、大于(>)、小于(<)、大于或等于(>=)、小于或等于(<=)和不等于(!=)。这些都是我们熟知的比较操作符,它们为类型定义了什么是相等,什么是大于,什么是小于,等等。比较操作符都是系统定义函数,对于某种类型,只能存在一组操作符。而且,在 DB2 中不能覆盖比较操作符。这不是因为覆盖不好,而是因为比较操作符要依赖于一个内部 Boolean 类型,而在 DB2 中没有将此类型外部化。长数据类型中没有定义类型比较操作符,因为比较操作,例如比较一个 Blob 是否大于或等于另一个 Blob,是没有多大意义的。

当在 DB2 中使用一个索引进行搜索时,Btree 实现将为该类型使用类型比较操作符,以判断是否命中。要在 IBM DB2 中创建索引:

CREATE INDEX MYIDX ON MYTABLE ( KEYCOLUMN );

请在 SQL Reference 2 中查看关于如何通过 CREATE INDEX 语句创建索引的形式描述。

当把数据插入到具有 Btree 索引的一列/多列中时,标准 Btree 实现将为涉及索引的每一个列生成一个索引键。如果索引是以惟一关键字定义的,那么索引就只能包含惟一的键组合。UNIQUE 关键字提高了选择性,进而加快了索引的速度。索引扩展键集总应该是惟一的,所以对于一个基于索引扩展的索引,都隐含地有 UNIQUE 标志。

用户定义类型

索引扩展的关键特性:

字号: | 推荐给好友

21/212>

评分:0

我来说两句