本发明涉及到计算机数据库系统,特别是借助于数据处理语言语句来存取的关系数据库系统。 数据库系统中所有数据是以模式(Scheme)说明来描述的,该模式说明本身是以描述它的模式为特征的。该模式定义了数据库数据项(object)的属性及它们之间的关系。在关系数据库操作中使用DML(Data Manipulation Languege-数据处理语言)语句编译期间,必须要存取该信息,以便识别用于给定语句的数据库数据项的属性和它们之间的关系。
举一个以前地例子,称做结构查询语言SQL的查询语言的一种形式已得到广泛的承认,它可使用户以高级的、非确指的、非过程的(NON-procedural)语句来指定数据库的操作。在“ANA数据语言SQL建议草案”标准号X3·135-1986中对SQL语言有详细说明,可向美国国内标准化协会,1430 Broadway,N.Y,NY10018索取。对SQL的详细讨论见”IBM数据2SQL参考手册”,文件号SC26-4346-3,IBM公司,Armonk,New York。
用户只要简单地指定一个操作名(取数、修改、插入等),而后指定一个要对其进行操作的数据项(表,图或栏目)。例如图1中给出了一个关系数据库的简单例子。假定具有这些信息的关系数据库的用户,要检索所述表中某雇员的姓名、雇员号及薪水,相应的SQL语句可以是
SELECT NAME,EMPNO,SALARY FROM EMPLOYEE(从雇员表中选出姓名、雇员号、雇员薪水)
由于SQL是很高级的语言,也就是说它没有指明文件,索引等等,因此,编译程序必须提供这些信息。编译程序必须检验姓名、雇员号及薪水是属于EMPLOYEE表的有效栏目。而且编译程序必须确认能够对指定栏目进行操作(即能被检索),还要确认在指定情况下可以使用它们。有这样一个例子,如果查询语句包含有进一步的限制,“Where name greater than $10000”,这很显然不是有效语句,因为姓名(字符字段)要与完全不相符的含有$10000的整数字段相比较。一旦完成了上述的验证检查,编译程序必须进一步确定如何存取雇员表,即,确定EMPLOYEE表的物理文件名,分析有效的索引,构成检索该数据必须的数据结构,等等。
这样,为了进行上面要求的确认,以及对物理存取任务进行归纳,必须把描述了数据库管理的全部数据项的物理特性的定义数据存贮起来。该信息存于一组系统目录集中(图2-5给出了一个简单例子)。这些目录用户能从外部看到,而且它定义了数据库内所有数据项的物理属性,并且还定义了数据库中的某一数据项及与其有指定关系的其它数据项间的某种关系(比如,是同一表的栏,同一栏内的索引等等)。
在编译期间,用户请求所指明的所有数据项的信息,必须从系统目录中存取出来,以便得到这些数据项的必要的物理描述。此外,与指定数据项有关的其他数据项的描述,也必须取出来。这一操作往往导致多次磁盘输入/输出(I/O)操作,并依次对描述这些数据项的记录“加锁”(Locking)。
这就使得在编译期间执行一个查询所用的时间相当可观。可以看到象图1-4所给出的并包括表、栏及索引等说明的系统目录,一般来说其每一个均构成一单独文件*,而每一项都存贮在单独的一行中。因为关系数据库的状态信息对具有几个栏的表是1∶n的关系,对具有m个索引的栏是1∶m的关系,编译要求的总数据项是1∶n∶m的关系,因此,这大均需要n×m次I/O操作(按最坏情况)本发明之前的一般数据库系统(包括IBM公司制造的正在市场上流通的商用系统DB2和SQLDB),其操作中都存在上述问题。
对于一个DML语句所访问的每一项以及子项,以前的数据库系统的方法是从系统目录中检索一行。为了确定一个数据项的子项,用“Link(连编)”把子项目录表与源(或福┦菹钅柯急砹灯鹄础@纾赶钍潜硐畹淖酉睿簿褪撬得挥斜恚覆荒艿ザ来嬖凇R虼耍琒YS.COLUMNS中的行必须与SYSTABLES的行有联系。这种联系是这样实现的,SYS.COLUMNS行中的TABNAME(表名)和TBCREATOR(制表人)栏的值与SYSTABLES行中的NAME(名称)和CREATOR(制表人)栏的值相符。对于某-DML语句访问的表项与图项,编译程序必须检索的次数可能与给定表连编的SYSCOLUMNS的全部行数一样多。同样,作一次表访问,必须对所有的索引信息进行存取。
这一工作当然要引起上述的大量磁盘I/O操作,随后对描述这些数据项的行加锁,而不能得到本发明所提供的增加的并行性。例如,给出-SELECT语句,则得到表的全部栏,该表具有100个栏和二个索引,可能要取数103次(一行是描述表数据项,每一栏数据项的描述各有一行,以及每一索引描述数据项各占一行)。由于编译中被检索的一些栏通常也是由用户提出的(像栏的数据类型),并且它们以外部格式保存在该目录中(比如:字符串“INTEGER”)。每当编译程序检索它们时,当然应变换成内部格式。
综上所述很容易看出,非常需要寻求一种新的技术,它应在数据库数据项分析中,使编译时间得到显著改善。而且,更希望提供的这种新型系统相对来说化费不多,又容易实现,同时又与存取数据的现存应用程序相兼容。
本发明提供一种系统和方法,它提供了许多压缩描述,作为表中的一栏,其每一登录数据定义了与不同数据项(比如:数据库定义的表或图)及其全部子项(比如:相关的栏和索引)的属性。存取与特定数据项相应的行,返回的是该数据项子项的全部属性的描述,以及描述该数据项本身的信息。该压缩描述信息通常重复地存贮在其它系统目录中,除了在数据处理语言(DML)语句编译中使用外,还可经常使用,为了兼容起见,端点用户可以按其它数据库语言相同方式来询问数据项的物理定义。构成该压缩描述的数据库状态信号以内部格式保存,而相关的冗余信息是以用户可读的外部格式保存的。根据对模式数据的模式的非规格化,使数据项之间关系的识别简化,并使编译DML语句所需的时间大大减少。DML语句指定的某一数据项的属性以及编译该语句所必须的它的子项的全部信息,只要一次I/O操作就可以从与该数据项有关的压缩描述中得到。但是,要检索数据项的说明,必须通过许多I/O操作,从包含这些说明的各个系统目录中收集出来。
本发明主要特征的突出特点列在后面的权利要求内。参照后面具体实例的说明,并结合下述附图,就可以更好地理解本发明和它的其它特点和长处,这些附图是:
图1.是一雇员表形式的关系数据库的简明例子,该表可由本发明的系统所存取。
图2.是一个系统目录的实例,它描述了图1中的表及该数据库中其它表的细节。
图3.是一个系统目录的实例,它描述了图2目录所述表中栏目的细节。
图4.是一个系统目录的实例,描述了索引的细节,它可用以存取图3的栏目中的栏。
图5.给出了如图4所述的那些索引的功能。
图6.是普通压缩描述栏字段的概念性实例,该字段可以是图2系统目录中的一个记录。
图7.是图6所示格式中一个特定压缩描述的实例,它与图1的雇员表和图2-4的系统目录有关。
图8.是关系数据库系统操作的计算机处理流程图,根据它可以生成及支持本发明的压缩描述的栏描述部分,以及一般的SYS.COLUMNS文件。
图8A.是图8所示过程的另一个具体实例的流程图。
图9.是与图8相应的流程图,它可生成及维护该压缩描述的索引描述的成分以及一般的SYS.INDEXES文件。
图10.是计算机处理的简明流程图,据此可存取并使用本发明的压缩描述。
图11.可以生成并使用本发明的压缩描述的计算机关系数据库系统的示意图。
参照图1-5,将给出本发明所提的一般说明,还讨论了解决它的一般方法,其后面是具体实现方法的详细说明。
首先参看图1,它给出的是关系数据库系统要存取的数据的简化例子。该例中,雇员表10包含每一雇员的若干记录,其1-4栏分别包含有雇员号,姓名,薪水和部门号等信息。在传统的关系数据库中,提供了许多系统目录,如图2-4所示。图2给出了传统系统目录12的示意图,目的是要提供如图1所示的构成数据库的许多表的细节。例如,可以有一附表,比如雇员位置表,其中一栏是雇员号,另一栏指明雇员部门位置,也是他工作的地点。由于各种表中有公共元素,可以通过这些共性得出关系信息。比如,由于雇员号在上述的雇员表和雇员位置表是共同的,这一信息可用以把第一表中具体雇员姓名与第二张表雇员的工作位置联系起来。
图2中SYS.TABLES12的每一个表中都有一个记录项或记录行,图2中参照号18是与图1的雇员表有关的记录行。SYSTABLES的各栏内包含该表的名称(雇员表10的名称是“EMP”),制表人以及在编译时供数据处理语言语句或其它类似工作或目的而使用的统计信息。此外,SYS。TABLES12中的每一个记录都有一文件识别栏(22),利用它给出了与每一记录有关的文件的位置,从中可以获得关于该表的附加信息。从图2我们还会看到一附加栏PD(20),该部分由图中的阴影线表示。它表示的是SYS.TABLE12的每一记录的附加字段内容,这是先前数据库中所没有的,它是本发明的一部分,将在下文更详细地描述。现在只要知道PD是压缩描述(Packed Description)就可以了,该PD以长字段文件格式包含了与出现该特定PD的记录有关的特定数据项的全部子项的说明。在SYS.TABLES中数据库的每一数据项(比如,表或图)都有一个记录。
图3表示的是一般的系统目录中的SYS.COLUMNS目录部分的例子,在该例中,它可以是构成数据库的一部分。SYS.TABLES目录的作用是要说明系统目录的SYS.TABLES部分每一表的所有栏的属性。一般说来,SYS.COLUMNS目录和SYS.INDEXES目录(其代表性的例子示于图3和图4)包含了子项的信息,它说明了与之唯一关联的数据库数据项更详细的属性(比如,图1的表说明了图2的系统表的细节)。
仍参看图3,可以看到SYS.COLUMNS(14)所示的每一记录包含许多字段,它描述了雇员表10中相关的某一栏的属性。例如,其第一记录13,描述的是雇员表10的第一栏的属性,系统栏14的第二个记录(15)描述的是第二栏(表10的雇员姓名),如此类推。具体看第一记录(13),在“TALE”栏中第一个字段“EMP”表示:其右边的数据是关于雇员表中所出现的一栏的更进一步的信息和属性。可以看出,SYS.COLUMNS14的记录13的栏名24下的内容“EMPNO”是和其对应的EMP表的第一栏的栏名“EMP NO”相对应的。跟在系统栏14中记录13 ENP NO之后,COL NO(25)下面的数字1表示这是表10中的第一栏。在SYS.COLUMNS14中的记录13中,下一栏“TYPE”(27),有一项CHARACTER(29),它表示EMPNO栏中的字段是“字符”数据。SYS.COLUMNS中记录13的最后一栏,LENGTH栏(31),有一项“6”,指出EMP NO栏中允许的数据长度最长是6个字节。尽管系统栏14所示的记录只与雇员表的相关栏有关,也可以清楚地看到这些记录可以进一步扩充,它们描述了数据库中的其他表或图中的栏的属性,而这表或图具有与图2的TABLES栏中相对应的项目。
参看图4,除了与某数据项相关的子项的栏之外,还可以定义一些每一数据项的附加子项。这些就是索引,用上面的例子来说,可用SYS.INDEXES(系统索引)来说明。在关系数据库中,索引提供了数据恢复的有效手段。为了从总体上理解这种索引的作用,图5中给出了一个示意图,举例说明了SYS.INDEXES16的记录26所表示的一个雇员姓名的索引是如何使用的。假设在数据库操作期间,已经建立了雇员表10,并不时地通过插入语句
INSERT INTO EMP VALUES(38362,DOE,75000,A6A)把数据插入表中。该语句用来输入关于雇员Doe的数据,结果如表10所示。假设此后用一个语句SELECT FROM EMP WHERE DEPT NO=A6A AND SALARY>50,000来挑选关于包括Doe在内的某些雇员的数据。可以看出此查询是采用广泛使用的查询语言SQL格式。对该语句的编译和执行,需要关于Doe的文件,必须寻找与Doe的文件有关的记录识别符。如图5的EMP NAME索引中所示,Doe可能是在熟知的传统的B树结构中。在这简单的例子中,通过按Doe的拼音相应的字母结点来检索,最终找得到记录识别标记28,它包含了所要找的关于Doe的信息的文件的位置。
先前技术的一个问题是:系统目录(它包括系统表12,系统栏14,系统索引16)在存贮器内的贮存方法,使得从其一个系统表中检索数据都需要进行单独的I/O操作。就象在上面所示的必须存取数据的SQL格式一样,DML语句在编译时,通常必须对相应于DML语句指定的每一数据项的系统目录之一进行存取,以便能返回查询的结果。这就造成大量的I/O操作,并伴之以记录锁定,这增加了询问的复杂性,并造成DML语句编译时间和共享性方面的严重恶化。对于后一问题,以前的数据库系统是锁定到数据页面等级,而具有相当大的分散性(原文为粒度-granularity)。这种数据库系统当允许接入的用户数不断增加时,最终发现这种分散存取是非常不受欢迎的,共享性会成问题,比如,当一个用户正在使用数据库时,为了保证其连续性将进行锁定,这就阻止其它用户存取该数据库。这一点在以前系统中可能还没有成为问题,但随着数据库用户数的大大增加,以前数据库系统的局限性越益明显。因为进行锁定,以及由于前述大量I/O操作而引起的询问语句编译时所必须的不规则的长时间间隔,使得用户的工作被频频切断。
总之,在详细说明本发明之前,应知道所有关系数据库都包括如图2到图4所示的一组系统目录。它们通常具有表和图(称为数据项项)的描述;以及相关栏和索引(此后称它们为子项)的说明。每一目录本身又是一个表,这种表的每一个在系统表内都有一个记录,它定义该表的属性。以同样的方式,每一表的每一栏在系统栏内有一记录,它限定了该栏和它的属性。这些系统目录的作用是允许端点用户查询该数据库,并找出数据库内的数据项和子项以及它们的属性。
将会看到,该端点用户通常不能修改这种目录而只能查询它们,而且数据库管理程序的作用是记录这些目录,并且随着数据库的变化时时翻新它们。因此,可把目录看作是数据库的状态信息,任何时候都可以通过目录来了解数据库的情况。如上所述,先前系统的一个严重缺陷是:为了解决一次查询,必须对查询语句进行编译,以便对它进行论证和归纳,比如,句法认证、语义论证等等。而在进行这种编译时,反过来又要查寻系统目录中的信息。这种信息存取的开销巨大,因为它可能必需要对比如三个不同的表和大量数据库行进行存取。在先前的系统中,这种表的每一个都有某自己的Dos文件,必须通过潜在I/O操作才能接触这些系统表,n次I/O操作对系统栏,m次I/O操作是对该系统栏和相关行的每一个索引。而且,在这种存取期间,锁定会进一步减缓编译速度并严重影响共享性能。
在寻求解决这一问题时,本发明引入的一个思想就是把问询语句编译所需的必要信息以压缩描述的形式重复存贮起来。这样,依照本发明的技术,把包括前述信息的一个字段整体地照搬到多个系统目录和行。因此本发明就不需要单独地对每一个别文件进行存取,因而避免了伴随的I/O操作和性能恶化,因为这些信息可以通过一次I/O操作在一个文件中找到。
本发明的另一特点是,随着系统目录的建立和修改,相当的上述压缩描述信息也随之建立和修改,它不仅存贮在压缩描述内,也以传统方式重复地存贮在各个传统的SYS.TABLES,SYS.COLUMNS栏目内。随着数据库的改变,这包括传统表中的加入、修改等,该建立的压缩描述也随之更新。
重复地提供压缩描述信息而不像传统上只存在系统目录的重要性是它可以使整个系统的程序简化。以前的应用程序在执行期间,要各别地存取这些系统目录文件。通过重复地提供这些信息,压缩描述的内容对应用程序和用户是透明的。然而,这种随时建立并维持一有效的模式表示的方法具有上述的重大好处,它使一DML语句的编译时间的I/O处理减到最少,使1∶n∶m的关系减到1个字段,所以它是1∶1的关系。
可以看出本发明的明显缺点是增加了存贮空间(磁盘或其它介质),这是由于重复把该状态信息存贮到压缩描述和传统的系统目录内所要求的,并且“建立”这些信息也需要较长的时间,就是说,建立和修改该压缩描述数据需要附加的时间。但是,本⒚魉峁┑腄ML编译时间上的显著改善,以及随着数据库查阅次数相对于数据库建立和修改次数的增加,使得本发明带来很大好处。
本发明总的特点是,它提供了如图2系统表12的20所示的压缩描述。该压缩描述将包含与编译某包含一数据项的语句所必须的相应数据项有关的系统目录的全部信息。但更重要的是,该压缩描述将以长字段文件(Long field file)的方式存贮起来,因此,该数据项的子项的全部必要信息可以在一次I/O操作中取出来。
参看图6,它图示地说明了本发明的一个给定表行的一般压缩描述栏的登录内容。在SYS.TABLES12中,每一数据项和相应于SYS.TABLES12所示的数据项的记录,都有一个单独的这类登记区。
关于图6,在一具体实例中的每一压缩描述,首先是针对某一特定的数据库数据项的,并且以图中所示的一般格式保存在各自的长字段文件中。由于都知道的原因,该压缩描述将包含一台头信息,其后是多个栏说明,再后是多个索引说明,栏说明和索引说明都与压缩描述相联系的特定数据项有关。每一个这种压缩描述相应于SYS.TABLES中的不同行。在比如雇员表10这种表数据项的情况下,该表的每一栏都有一个栏说明。每一个栏说明相应于该特定表的SYS.COLUMNS文件中的一行,并且包括如下信息:栏名、栏号、数据类型(整数、字符、长字段等)。最后如图6所示的同样方法,为与该雇员表数据项有关的每一索引提供一个单独的索引说明,并且它相应于SYS.INDEXES中一个单独的行登录项,它含有如下信息:与该特定索引关联的表的名称,索引标识符,与该索引相关联的栏名等等。
图7中,给出了与图1-4所示例子中的系统目录相关的压缩描述的简化例子。为了简便起见,与该例中有关的索引说明被删去了。
图8和图8A,分别给出了一优先考虑的实施例和另一种实例,用现有数据库应用程序,通过计算机建立、修改及更新压缩描述的栏说明部分和相关的一般系统目录的流程图。而图9给出了计算机来建立、修改及更新有关数据项索引的压缩描述部分以及对传统的系统索引来完成类似操作的流程图。应知道本发明的另一特点是以内部格式(比如二进制格式)来提供这种压缩描述信息,这些信息不容易理解,并且以外部格式或者用户能看懂的形式提供冗余的系统且录信息。以这种方法,仍维持了本系统的可应用性,因为它仍然提供了与现存数据库系统和应用程序的兼容性。
参看图10,它是使用图8、和图8A所示的对SYS.COLUMNS和SYS.INDEXES生成、存贮和更新过的压缩描述信息来进行计算机处理的一般流程图。
现参看图9,它说明一个优先考虑的实施例,它是用编译系统(而不是图8A例中采用的解释系统)来建立、修改和更新压缩描述中的栏说明和相关的一般系统目录的计算机处理流程图。在编译时间(包括建立压缩描述的时间),当在49收到建表语句,首先在51处理表名,下一步初始化压缩描述区(57),接着处理栏说明(55)并把有关的栏说明加到压缩描述区(57)。在59处判断是否还有要处理的栏,若有,返回到55继续处理其它栏的定义。若无别的栏要处理,从59的№分支进到压缩描述台头的修改(29)。
继续看图8,在执行时间,软件执行如下操作。首先,数据库程序在31收到建表语句(以包括该压缩描述的内部格式),SYS.TABLES在35打开。在35,把一个表征该表(包括该压缩描述)的记录加入到SYS.TABLES,此后,在37关闭SYSTABLES。下一步打开SYS.COLUMNS(39),并从该压缩描述取出第一个栏说明(41)。下一步把一个新记录加到SYS.COLUMNS(43),而后在45判断是否还需要更多的栏说明。若需要,则处理返回到43以再加入一记录到SYS.COLUMNS。反之若不需要更多的栏说明,处理从45的出口进到47将SYS.COLUMNS文件关闭。
再反过来看图8A,这是图8处理的另一种实现方案,与图8的编译系统相反,它是解释系统。首先,在30,程序收到一个要建表或修改表的语句。相应的,程序在32处打开SYS.TABLES,并在34,建立或加一个表的记录到传统的SYS.TABLES目录中,此后,在36对压缩描述(包括台头及后面的信息)进行初始化。SYS.COLUMNS文件在38打开,并在40把新建的或加进的关于栏信息的记录加到传统的SYS.COLUMNS文件。在42把同样的栏信息加到压缩描述或根据栏信息修改压缩描述。而在44判断是否还要加入或修改新的栏。若需要,则程序循环,重复步骤40和42。照样继续处理,直到44的判断表明没有栏要建立或修改为止。一旦对新表或要修改的表的每一栏都建立了压缩描述的栏部分并存贮起来,处理就从环路退出,在50把SYS.COLUMNS文件关闭。在52处,把36和42处建立的压缩描述信息存贮在存贮器的相应区段,并在54处关闭SYS.TABLES文件。
同样对于图9及索引信息,在采用编译系统的具体实例中,编译时间,在61处数据库收到要建立或修改索引的语句。在63处理相关的表名,接着在65处理索引的定义。在69建立索引说明。在执行时间,数据库在60收到要建立或修改索引语句的指示(以内部格式),在62再打开SYS.TABLES文件,而在64从SYSTABLES中检索该索引。在66,根据在64得到的相应压缩描述位置中,得到相应的压缩描述,而后在68打开SYS.INDEXES文件,在70,说明特定索引被建立或修改的记录被插入到传统的SYS.INDEXES文件中,此后,在72修改编译程序建立的相关压缩描述的相关的索引部分。因为每一“建立索引”语句只建立一个索引,处理在80关闭SYS.INDEXES文件。这样,在前面72生成的关于该索引的压缩描述在82处被存贮到压缩描述字段,最后SYS.TABLES文件在84被关闭。
在图10,给出了本发明的压缩描述被数据库系统使用的过程。我们记得,在编译一要取出、插入、更新或删除的DML语句期间,对表或图数据项的每一次访问都要存取系统目录中该数据项的说明及压缩描述。在DML语句对表或图数据项作第一次访问时,该系统表在86被打开,在88从被存取的表中读相应记录,它包含有关数据项相关的压缩描述。一旦发出从数据库检索相应的压缩描述并存到内存贮器的取数请求,当DML语句要再访问该数据项时,编译程序可以查阅已经存放在内存中的压缩描述信息从而省去I/O操作。通过一次I/O操作以一个整体从内存中检索到的相关的压缩描述,一旦得到了表或图的压缩描述,编译程序就可以通过它来得到关于该数据项和子项的必要信息。
图11是利用本发明的压缩描述特点的计算机关系数据库系统的简单构成图。首先它有一个处理机96,它可以是现在流行的任何型号的微型计算机小型计算机或大型计算机,比如传统的“PC”型个人计算机及类似产品。它还有内存贮器94,它存贮数据库程序,包括实现图8-10所示处理的计算机程序。此外,存贮装置94(以硬文件或类似型式)存贮利用计算机关系数据库及本发明的压缩描述要查询的如图1所示的关系数据。键盘92可使用户向系统输入信息,包括对贮存在存贮装置94中的关系数据的附加数据输入,更新和编译命令,以及各种数据检索或查询命令,这些命令可以在编译期间以前述方式使用压缩描述。还备有任何型式的终端90,它可以向用户提供计算机和键盘92的直观输出信息。还有相应的互连线98,它可以包括一般的地址命令、控制总线,以便把处理机96、内存94、键盘92,显示器90及辅助存贮装置互连起来。
本发明的压缩描述最好用SQL的数据类型“长字符”以字符串栏存贮在数据库中。这是一个变长字符串,长度可达32700字节节。在内部,熟知的C语言结构用以给该栏下定义。如前所述,压缩描述包含一台头信息,后面是一系列栏说明(表或图的每一栏有一个栏说明),最后是一系列前述的索引说明(表中定义的每一个索引有一个索引说明)。在编译“建表”语句或“建图”语句时,建立该压缩描述的台头部分和栏说明部分。当执行该语句时,如同其它数据库产品一样,将在SYS.TABLES目录表中产生一说明表和图的行,并对每一栏,在SYS.COLUMNS目录表中生成一行。该压缩描述是栏中的一个,它占SYS.TABLES目录中的一行。
通过“改表”(ALTER TABLES)语句加进后来生成的栏说明。相关表的压缩描述栏被更新,以便把这些加入的栏说明包含进去,改变台头信息(比如栏数目,对索引信息的偏移量、等等),并更改该行的栏计数(COLCOUNT)栏。同样“建索引”(CREATE INDEX)语句引起加进一索引说明。在此情形下,该表的压缩描述将改变以包含该加入的索引说明并改变台头信息(比如索引数目)。与其它数据库产品一样,对每一新栏,在SYSCOLUMNS中将增加一行,而对每一新索引,SYS.COLUMNS中也将增加一行。
该压缩描述内的值用以生成另一目录栏。比如,参看图8A,SYS.COLUMNS内一行的值是从相关表或图的压缩描述的特定栏说明中求出的。这样,就保证这些栏包含的信息与贮存在该压缩描述栏内的数据相一致。
此外,在执行搜集表以及/或者表的索引的统计信息的应用程序期间,该压缩描述也被更新。这些信息用以在编肫诩淙范ù嫒「帽?的最佳存取方法。如同其他数据库一样,每一统计结果也存贮在SYS.TABLES及/或SYS.INDEXES的一栏内,以便端点用户能方便地得到它。
在执行了定义一个表或图的语句之后,编译程序可以存取该数据项的压缩描述。在编译此后的DML语句(如,取数、插入、删除等)期间,每次访问表成图都要存取该数据项的压缩描述。在一语句第一次访问表项或图项时,编译程序必须发出一取数请求,以从数据库中检索该压缩描述并存到存贮器中。若一语句又要访问该数据项,大多数情况下,编译程序将只查阅存贮在存贮器内的该压缩描述。一旦编译程序已得到了某表或图项的压缩描述,如前所述,就可以得到该数据项及其全部子项的信息。
尽管前面说检索该压缩描述只要一次I/O操作,但从更一般意义上来说,本发明让编译程序检索的压缩描述是从逻辑上的一行取出数据。比如,这种取数请求可以在实际上产生两次物理I/O操作,为了取出长字段内的全部数据,具体执行时会需要取两行而不是一行。
在结合具体实例对本发明作了上述说明之后,这方面的行家会理解:从形式及细节上作上述变化或其它改变都不会超出本发明的精神,因而属于本发明的范围。