局部物化视图的制作方法

文档序号:6638248阅读:130来源:国知局
专利名称:局部物化视图的制作方法
技术领域
本发明一般涉及数据库领域,尤其涉及局部物化视图。
背景技术
当用户需要来自数据库的信息时,用户发出从数据库中的数据计算所需信息的查询。查询一般涉及数据库的一个或多个基表或视图。物化视图是可以用于计算部分或全部查询的预先计算的结果,而非从基表中计算它。在完全物化视图比基表小得多或者所替代的表达式计算起来花费昂贵的情况下,可以大大地减少对查询求值所需的时间。一般使用视图维持技术将任何视图源表的更新扩展到完全物化视图,这样使得物化视图与源表保持一致。

发明内容
以下提出本发明的简化概述,以便使读者能基本理解本发明。该概述不是对本发明的详尽或限制的综述。该概述未标识出本发明的关键和/或决定性元素、也未描绘出本发明的范围或者以任何方式限制本发明的范围。它仅有的目的是以简化形式给出这里所公开的一些概念,以便作为下面给出的更详细描述的序言。
关系型数据库允许用户创建视图,并且在查询中用和基表相同的方式来引用它们。视图由查询表达式定义。在现有数据库系统中,视图或者是完全物化的,或者是完全非物化的。虚拟视图是视图结果中没有一个记录是物化的视图。在完全物化视图中,查询表达式的结果中的每个记录是物化的。即,在更新源表期间,每行或每个记录被计算、存储和维护。
完全物化视图会有缺点随着源表大小和更新速度的增加,计算、存储和维护其所有的记录将变得越来越昂贵。当完全物化视图较大而且经常更新时,维护会是昂贵的。如果在一段时间内只使用完全物化视图的一小子集,从未使用的许多记录无需保持最新,由此增加更新的处理时间。此外,在某些情况下,完全物化视图不能以足够快的速度被修改以适应不断变化的需求。修改完全物化视图要求删除当前视图并创建一个新视图,包括“从零开始”物化该新视图。而且,这会需要重新编译引用该完全物化视图的所有查询计划。
局部物化视图是查询结果中行或记录的仅一个子集会被物化的视图。例如,可以物化查询结果中所有记录中的部分记录(诸如最常被请求的记录),而非物化全部记录。
视图中哪些记录被物化可以由视图定义表达式来指定,该视图定义表达式引用与视图相关联的一个或多个控制表的内容。控制表可以指定离散的参数值、参数区间、参数上界和/或下界,和/或可以指定不被物化的记录以标识包含在局部物化视图中记录的子集。例如,包含顾客订单的视图会具有包含一个或多个顾客ID的控制表,该顾客ID指定了在视图中哪些顾客的订单当前被物化了。
哪些记录被包含在局部物化视图中可以通过改变其相关联的控制表中的条目来改变。在这个例子中,在控制表中简单地增加或删除顾客ID分别会造成从视图中增加或删除顾客的订单。改变包含在局部物化的视图中的记录可能无需重新编译引用该局部物化视图的查询计划。可以使用公知视图维护和更新算法来更新局部物化视图,而非像完全物化视图那样用经修改的局部物化视图来替换局部物化视图。
在输入查询能使用局部物化视图之前,可以验证该视图当前包含查询所需的记录。一般地,这会涉及检查某些行是否存在于控制表中。回到示例的视图,检索特定顾客的所有订单的查询会可以使用该视图。然而,在使用该视图之前,会先在控制表中检查顾客ID的存在。如果确定输入查询不能使用局部物化视图,那么会用一个或多个源表中的数据来对查询求值。
结合附图,将完整地描述依照本发明示例性实施例构建的系统的这些和其它的目的和优点。


图1是实现局部物化视图的示例性实施例中使用的示例性计算机系统的示意性描述;
图2是实现局部物化视图的示例性实施例中使用的示例性数据库系统的示意性图示;图3是图2的数据库系统的示例性数据结构和数据库的示意性图示;图4是示出创建图3的局部物化视图的示例性方法的流程图;图5示出了在一个实施例中对源表应用查询表达式和控制表以创建局部物化视图的示例;图6示出了在一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图7示出了在另一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图8示出了在又一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图9示出了在一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图10示出了在另一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图11说明了在又一个实施例中,对图5所示的源表应用示例性控制表以定义局部物化视图;图12示出了在另一个实施例中,对图5所示的源表应用示例性多个控制表以定义局部物化视图;图13是在一个实施例中,示出局部物化视图的视图匹配的示例性方法的流程图;图14是示例性局部视图的图解;图15是示例性局部视图的图解;图16是示例性局部视图的图解;图17是示例性局部视图的图解;以及图18是示出现有技术的视图匹配的示例性方法的流程图。
具体实施例方式
示例性操作环境图1和以下讨论意在提供对其中可以实现本发明的适当的计算环境的简要的、概括的描述。图1的操作环境只是适当的操作环境的一个例子,并非意味着对操作环境的使用范围和功能的任何限制。其他适用于这里所描述的局部物化视图的公知的计算系统、环境和/或配置包括但不限于,个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费者电子产品、网络个人计算机、微型计算机、大型计算机以及包括任何以上系统或设备的分布式计算环境等等。
虽然不是必须的,但局部物化视图会在诸如由一个或多个计算机或其他设备执行的程序模块等计算机可执行指令的一般环境中描述。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等。一般地,程序模块的功能可以按照各种环境所需组合或分布。
参见图1,用于实现局部物化视图的示例性系统包含诸如计算机设备100等计算设备。在其最基本的配置中,计算设备100一般包含至少一个处理单元102和存储器104。根据计算设备的确切配置和类型,存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等等)或这两者的某个组合。在图1中用虚线106示出了这个最基本的配置。此外,设备100也可具有附加的特征和/或功能。例如,设备100也可包含附加的存储(例如,可移动的和/或不可移动的),包含但不限于,磁盘或光盘或磁带。这种附加的存储在图1中由可移动存储108和不可移动存储110示出。计算机存储介质包含易失性和非易失性、可移动和不可移动介质,它们以任何用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的方法或技术来实现。存储器104、可移动存储108和不可移动存储110都是计算机存储介质的例子。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或任何其它可以用于存储信息且可由设备100访问的介质。任何这样的计算机存储介质可以是设备100的部分。
设备100也会包含允许设备100与其它设备通信的通信连接112。通信连接112是通信介质的例子。通信介质一般具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,且包含任何信息传递介质。术语“已调制数据信号”意指以在信号中编码信息的方式设置或改变其一个或多个特征的信号。举例而言而非限制,通信介质包含诸如有线网络或直接线连接等有线介质,以及诸如声学、射频、红外线和其它无线介质等无线介质。这里所使用的术语计算机可读介质包括存储介质和通信介质两者。
设备100也可具有输入设备114,诸如键盘、鼠标、笔、语音输入设备、触摸输入设备和/或其它输入设备。也可包含诸如显示器、扬声器、打印机和/或其它输出设备等输出设备116。
图2示出了支持局部物化视图的计算机数据库系统200的一个例子。数据库系统200包含数据库210、数据库服务器220和客户端工具230。数据库系统200依照例如由客户端工具230提供给数据库服务器220的数据操纵语句或查询来管理数据库210中数据的存储和检索。客户端工具230可以是例如,数据库应用程序、用户界面工具、联机分析处理(OLAP)或数据挖掘中间件、OLAP或数据挖掘应用程序服务器、或任何其它适当的数据库界面组件。
数据库210包括表示数据关系的至少一个数据源表。每个源表包括存储在一个或多个数据字段中的数据的一组记录或元组。表的记录也被称为行,表中记录的数据字段也被称为列。源表可以是任何类型的数据存储,包括关系型数据库、面向对象的数据库、非结构化的数据库、存储器内数据库(in-memorydatabase)或其它数据存储。可以使用平面文件系统来构造源表,该平面文件系统诸如ACSII文本、二进制文件、在通信网络上发送的数据或其它任何文件系统。尽管有上述源表的这些可能实现,然而这里所使用的术语源表是指可以用任何计算机可访问方式收集和存储的任何数据。
数据库服务器220处理查询,以便例如检索、插入、删除和/或更新数据库210中的数据。数据库系统200可支持任何适当的查询语言(诸如结构化查询语言(SQL)等等)来定义可由数据库服务器220处理的查询。适当的SQL查询可以包括例如Select(选择)、Insert(插入)、Delete(删除)和Update(更新)语句。一个实施例的数据库服务器220包括来自华盛顿州雷蒙德市的微软公司的MicrosoftSQLServer;来自加利福尼亚州Redwood Shores的Oracle公司的Oracle数据库服务器;以及来自纽约州Armonk的国际商业机器公司的DB2通用数据库系统。数据库服务器220可以为查询生成有效的执行计划,并可以优化特定的查询表达式。
数据库服务器220和客户端工具230可以被实现为程序模块或计算机可执行指令,且可以被存储在任何适当的计算机可读介质中,用于在诸如图1的计算环境等适当的操作环境中执行。数据库210的数据可以用一个或多个适当的数据结构的形式来实现,并且可以被存储在任何适当的计算机可读介质中。
局部物化视图参见图2的数据库210中的局部物化视图描述了图3-12。参见图3,完全物化视图结果318是对照一个或多个源表304对视图表达式306求值的结果。由查询表达式306产生的查询结果的所有记录用完全物化视图来计算和存储。完全物化视图结果会是相当大的。例如,假设视图被定义为零件表和供应商表的合并,并且有500,000个零件且每个零件平均有两个供应商。那么完全物化视图会包含大约1,000,000个记录。此外,采用完全物化视图,物化视图中的所有记录必须被保持最新,即使是那些从来没有被任何查询使用的记录。
相反地,局部物化视图300是其中来自视图表达式306的结果的行的一个子集被物化,即被计算和存储的视图。局部物化视图定义表达式320的定义包括视图表达式306和附加控制判定316,该附加控制判定用于基于一个或多个控制表314的内容进一步限制视图。结果是,如果使用了局部物化视图,不是基于特定视图表达式的结果的所有记录都被包括在局部物化视图中。局部物化视图可以被方便地改变,并且在某些情况下,查询可以继续针对经改变的局部物化视图运行而无需再编译。
控制表在局部物化视图300中物化的记录的子集可以用任何适当的方法来标识。参见图3,视图定义表达式320包括定义完全物化视图318的结果的视图表达式306,但由参考一个或多个控制表314的控制判定进一步限制这些结果。以这种方式,当应用于源表304和控制表314时,包括查询表达式306和控制判定316的视图定义表达式320定义了哪些记录会出现在局部物化视图结果300中。
控制判定标识了要通过指定控制表的值和视图源表的值之间所期望的限制来物化的记录的子集。应该理解,控制表、视图和/或源表中的数据的任何表示可具有参数、其属性和其值的任何适当表示。控制判定类似于参数化的布尔函数,且控制表指定了函数将哪些实际参数值求值为真。参见图3,控制判定将控制表314的行或记录的列值与视图源表304的记录中的列值相关,从而指示了这些列值之间所期望的限制。列值之间所期望的关系,诸如等价、不等价、范围、符号样式(诸如通过字符串匹配)等等,可以用任何适当的方式来指示。例如,为了标识包含在局部物化视图中的记录的子集,位于控制表314中列值中的值或其它指示符会指定等价的值、不要被物化的记录和/或上界和/或下界。控制判定可以用诸如“AND”和“OR”等逻辑连接符将多个较为简单的控制判定连接在一起。
虽然控制表在这里被讨论为具有行和列,但是控制表和控制判定可以具有任何适当的格式和/或句法,以便传达对将要在局部物化视图中物化的源表记录的限制。如参见图2讨论的源表304,控制表314可以是任何类型的数据存储,所述的数据存储是指以任何计算机可访问方式收集和存储的任何数据。此外,虽然这里所描述的控制表用列中所指示的参数值指示了控制表记录中的判定,然而应该理解,任何参数、格式和/或逻辑操作符可以用控制表的行和列来指示。例如,控制表的列可以指示多个判定,而控制表的行可以指示参数限制。
创建局部物化视图的方法图4示出了创建局部物化视图(诸如图3的局部物化视图300)的示例性方法400。参见图3,可创建(402)至少一个控制表。可以基于来自图2的客户端组件230和/或数据库服务器220的输入来生成存储在控制表中的记录。定义局部物化视图的视图定义表达式可被接收(404),诸如从图2的客户端组件230接收。接着可以对该视图定义表达式进行语法分析(406)并检查其正确性。视图定义表达式可以被优化(408),诸如由图2的数据库服务器220的查询优化器来进行优化。查询优化器或其它适当的组件可以为包含任何控制判定的视图定义表达式生成优化的查询计划。数据库系统接着执行查询计划(410),由此产生一组包含局部物化视图结果的记录。存储(412)记录的经标识的子集以局部物化视图,这完成了视图的创建。如上所述,局部物化视图可以用与完全物化视图相似的方式来存储。
图4也示出了修改已创建的局部物化视图的示例性方法。在某些情况下,可以修改源表(416)或修改控制表(414)来更新存储在数据库中的数据字段。为了将这些修改传播到对应的局部物化视图,可使用任何适当的方法来确定(418)对局部物化视图的最后所得变化,并相应地更新(420)局部物化视图。例如,可以用类似于数据库服务器如何使用视图维护策略或任何其它的高速缓存维护策略来维护完全物化视图的方式来维护局部物化视图。用于递增地维护完全物化视图的通用技术在Gupta等人的“Maintaining Views Incrementally”(SIGMOD,1993)中描述,该文通过引用被包含在此。参见图2,数据库服务器220会递增地用来自源表304的更新数据更新图3的局部物化视图300中存储的记录。
参见图2,为了修改控制表,用户会手动地使用客户端工具230改变控制表,或者数据库服务器220会自动地修改控制表。例如,对控制表中记录的手动和/或自动修改可以是动态的,例如响应于时间或其它输入而修改。图2的数据库服务器220可以跟踪用户所提交的查询使用了哪些记录,并依照预定选择标准动态地修改控制表,所述预定选择标准包括在一段时间内最常用的查询、最昂贵的查询、最近查询、最近最少使用的查询等等。这些标准可以用诸如系统目录或元数据等任何方式存储。
参见图3,如果控制表314被修改,则图2的数据库220的正常高速缓存维护策略可以自动地更新局部物化视图300。例如,可以改变包含在控制表中用作控制判定中的上界和下界的值,而不改变定义包含在局部物化视图中的记录的视图定义表达式的SELECT表达式。结果是,可以使用增量视图维护而非完全重计算(例如,替换)来只用控制表的相关部分更新局部物化视图。
改变包括在局部物化视图中的记录可能无需在运行时重新编译查询计划。更具体地,增量视图维护一般允许现有的查询计划来保持有效和可操作,而非只要局部物化视图被更新就需要重新编译。例如,如下面详细描述的,确定查询是否可以在局部物化视图上运行会在查询的执行或运行时发生。以这个方式中,评估查询是否可以对照局部物化视图来运行的运行时测试可以对照更新后的局部物化视图来评估,其结果是,减少了重新编译查询计划的需求。
局部物化视图的专用名称参见图2,数据库管理系统200可以支持允许客户端260定义局部物化视图的专用名称,诸如通过包含图3所示的查询表达式306和一个或多个控制表314的视图定义表达式316来定义。
这里所描述的查询定义表达式可以用任何适当的数据库语言在任何适当的数据库服务器或其它计算机系统上实现,所述计算机系统诸如微软公司的SQL Server系统、Oracle公司的数据库服务器、国际商业机器公司的DB2等等。SQL语言中的以下例子说明了可用于实现图5-12的视图定义表达式和局部物化视图的专用名称。在这些例子中,图5的源表504被称为“T”。
参见图3,可以从对照源表304执行基本视图表达式Vb306来确定完全物化视图318。基本视图表达式Vb的联合和选择判定可以被表示为Pv。为了创建局部物化视图,基本视图表达式Vb可以被用作基础,且可以用控制判定Pc(p1,p2,…,pn)来控制物化,其中p1,p2,…,pn是参数。控制判定Pc可以是涉及Vb的非聚集输出列和参数p1,p2,…,pn的判定。对于出现在控制判定Pc中Vb的每个列,可以计算其列等价类。C表示这些列等价类的并集。C被称为控制列组,因为可由控制判定Pc用一种方式或另一种方式来控制C中的列。
可以生成带有有限数目行的控制表Ct。其中每行有n列,对每个参数p1,p2,…,pn有一列。以下示出了控制表Ct和局部物化视图pmv的示例性声明。
CREATE TABLE Ct((Cttypeof(p1),C2typeof(p2),…,Cntypeof(pn))CREATE VIEW pmvSELECT Vb.*From VbWHERE EXISTS(SELECT*FROM Ct WHERE Pc(Ct.C1,Ct.C2,…,Ct.Cn))局部物化视图的声明可以包括EXISTS操作符,用于定义记录应该满足哪些条件以被包含在局部物化视图中。上述声明中的EXISTS子句将要在局部物化视图pmv中物化的元组或记录限于对于当前存储在控制表Ct中的某一参数组合满足控制判定Pc的那些元组或记录。因此,通过从控制表Ct增加和删除元组,可以控制局部物化视图pmv的内容。如上所述,Vb是可以由引用源表和/或其它视图的查询表达式定义的底层基本视图的简写引用。然而,应该理解,任何视图可以通过增加适当的控制判定和创建必须的控制表来作成局部物化视图。表示法typeof(pi)是“匹配参数pi的类型的类型”的简写。
起初,在用由CREATE TABLE表达式启动的字段中的值来填充之前,控制表是空的。因此,所得的局部物化视图也是空的。为了物化信息,通过图2的客户端工具230或数据库服务器220的某个组件,用户可以用值填充控制表Ct的至少一行。接着可使用正常的增量视图维护来正确地更新局部物化视图pmv,以包含现在满足局部物化视图的控制判定的记录。
在某些情况下,通用视图维护算法可能不直接支持视图定义表达式中的EXIST子查询。然而,局部物化视图的视图定义表达式可以被转换成不包含EXIST子查询的表达式,例如选择-项目-合并(select-project-join)。以这种方式,只要基础视图Vb可增量维护,可以用通用视图维护算法来增量地维护局部物化视图。
上述示例性定义视图pmv可以被转换成以下所示的等价表达式CREATE VIEW pmv’asSELECT Vb.*From Vb,CtWHERE Pc(Ct.C1,Ct.C2,…,Ct.Cn))GROUP BY Vb.key局部物化视图pmv’包含与由上述示出的第一示例视图定义用EXISTS子查询所创建的视图pmv一样数目的行。视图pmv’可以是常规的选择-项目-合并-组合(select-project-join-group)视图,并且可用通用视图维护算法增量来维护。
对照基本视图Vb和控制表Ct对判定Pc的求值会返回一个以上元组。因此,局部视图pmv’中的行可能包含重复。为了删除重复的行,可如上所述地向局部物化视图声明中添加GROUP BY操作。如果已知EXIST子查询只返回一行(例如下面图6-12中示出的局部物化视图600、700、800、900、1000、1100、1200),则视图声明会删除GROUP BY操作符。
如上所述,一个以上控制表可以用于定义局部物化视图和/或查询表达式的执行,且控制表判定可能从源表返回重复的行。为了辅助视图维护,例如将对控制表和/或源表的更新传播到局部物化视图,COUNT列会被添加到局部物化视图,它指示局部物化视图的记录所满足的控制表和/或判定的数目和/或身份。例如,两个控制表C2t和C2t和局部物化视图pmv”的示例性声明可以示出如下。
CREATE TABLE C1t((C11typeof(p1),C12typeof(p2),…,C1ntypeof(pn))CREATE TABLE C2t((C21typeof(p1),C22typeof(p2),…,C2mtypeof(pm))CREATE VIEW pmv”asSELECT Vb.*,COUNT(*)as NFrom Vb,C1t,C2tWHERE P1c(C1t.C11,C1t.C12,…,C1t.C1n)ANDP2c(C2t.C21,C2t.C22,…,C2t.C2m)GROUP BY Vb.key当查询表达式或控制表判定被更新时,COUNT列可以用于确定局部物化视图的哪些记录要被删除,如下面进一步论述的。如果对于任何记录COUNT值变为0,那么该行可以从局部物化视图中删除。
示例性局部物化视5示意性地示出了源表504的例子和将用于说明不同类型的控制判定和控制表的示例性查询表达式506。控制判定508、控制表514的不同实例将和局部物化视图500的所得实例一起示出。图5所示的查询表达式只是定义视图的可能查询表达式的一个例子。查询表达式506可以是指示在一个或多个源表504和/或任何物化视图中可用的数据的任一组合的检索请求的任何查询表达式。
在图5的例子中,查询表达式506(如果不用控制判定对照源表504执行)定义具有列ID 524、AGE 526、STATE 528和INCOME 530以及包含源表504的所有的行的查询结果。如果这个查询结果被物化,应该得出包含源表504的所有记录但只存储所指示的数据字段ID 524、AGE 526、STATE 528和INCOME530的完全物化视图。
示例性控制判定和控制表图6-12示出了控制判定和控制表例子,以及当应用于图5所示的查询表达式506和源表504时所得的局部物化视图。图6-12所示的控制表的类型和组合只是可采用的各种控制表的一些例子。应该显而易见的是,可以采用控制表或任何其它合适的数据结构或指令或操作集,它们可容纳可限制查询结果的物化的任何类型或组合的查询判定。虽然图6-12中所示的控制表和所得的局部物化视图被示出为带有列标题,但是列标题不是必须的并且是为了说明清楚起见包含于此。
图6图6和7的每一个示出了包括要用在指定等式约束的控制判定中的离散列值的控制表。在图6的例子中,控制表614包括单列628STATE。控制判定608规定只有在控制表614包含带有等于图5中所示的源表504的STATE列528的STATE值的STATE值的行时才物化视图记录。控制表614包含带有值“MD”的单行,由此只有在STATE列中带有值“MD”的视图记录才会出现在局部物化视图结果600中。
下面使用适用于Microsoft SQL Server的句法示出了图6的控制表614、局部物化视图600和查询表达式506的示例性声明CREATE TABLE TABLE_614(STATE char(2)primary key)CREATE VIEW pmv600 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom TWHERE EXISTS(SELECT*FROM TABLE_614 ct WHERET.STATE=ct.STATE)CREATE UNIQUE CLUSTERED INDEX pmv600_cluON pmv600(ID)上述CREATE TABLE表达式创建带有参数列STATE的图6的控制表614。SELECT T.ID、T.AGE、T.STATE、T.INCOME查询表达式从包含在局部物化视图600中的图5的源表504(T)确定列。引用控制表TABLE_614的EXISTS操作符确定包含在局部物化视图pmv600中的记录,即图5的源表504中那些具有等于控制表TABLE_614的某行中的值的STATE值(T.STATE)的记录。CLUSTERED INDEX表达式触发局部物化视图pmv600的实际创建。如上所述,控制表TABLE_614和局部物化视图pmv600起初没有任何记录。为了物化局部物化视图pmv600中的信息,通过图2的客户端230或数据库服务器220的某个组件,用户可以用值填充控制表TABLE_614的至少一行。正常增量视图维护可以正确地更新局部物化视图pmv600,以包括当对照图6所示的控制表TABLE_614求值时满足控制判定的记录。
EXISTS操作符可被转换成内部合并,以产生视图定义的等价声明。例如,由于STATE参数也是主要关键字,EXISTS表达式的子查询可以被转换成内部选择-项目-合并表达式。例如,上面给出的pmv600的声明可被转换成CREATE VIEW pmv600 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom T,TABLE_614ctWHERE T.STATE=ct.STATE由选择-项目-合并表达式定义的所得的局部物化视图pmv600可使用诸如用于维护完全物化视图的那些标准视图维护技术来维护。
图7在图7的例子中,控制表714包括ID列724,且包括含有值“1”、“9”和“10”的行。应该容易理解,任何数目的等价值可以包含在控制表中。控制判定708规定图5的源表504的ID列524的视图记录只有在其ID值与控制表714中的行之一中的ID值相匹配时才要被物化。图7的所得的局部物化视图700包括如查询表达式506所指定的ID、AGE、STATE和INCOME列;局部物化视图700的记录只包括当对照控制表714(即ID=1、ID=9或ID=10)求值时由控制判定指定的那些记录。在这个例子中,SQL语言专用名称包含控制表中所示的多个值之间的‘or’。应该理解其它所期望的逻辑操作,诸如‘and’等可以用控制判定的类型来实现。此外,其它查询语言会包含控制表的多个记录之间的其它逻辑操作符,应该理解,任何其它适当的操作符会是适用的。
以下示出了图7的控制表714、局部物化视图700和查询表达式506的示例性声明CREATE TABLE TABLE_714(ID int primary key)CREATE VIEW pmv700 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom TWHERE EXISTS(SELECT*FROM TABLE_714 ct WHERE T.ID=ct.ID)CREATE UNIQUE CLUSTERED INDEX pmv700_cluON pmv700(ID)CREATE TABLE表达式创建带有参数列ID的图7的控制表714。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图700中图5的源表504(T)确定列。WHERE语句或者以上参见图6的专用名称所述可选的EXISTS表达式引用了控制表TABLE_714,并确定包含在局部物化视图700中的记录,即图5的源表504(T)中具有等于控制表ct714中某列中的值的ID值的那些记录。CLUSTERED INDEX表达式触发局部物化视图pmv700的创建。如上所述,控制表TABLE_714和所得的局部物化视图pmv700没有任何记录。为了物化局部物化视图pmv700中的信息,用户会通过图2的客户端230或数据库服务器220的某个组件用值(例如,1、9和10)来填充控制表TABLE_714的至少一行。正常增量视图维护于是可以正确地更新局部物化视图pmv700,以包含满足控制判定的记录。
图8图8所示的控制表814包括两列(AGE 826、STATE 828),但是应该容易理解,控制表可以包括任意数目的列。控制判定808规定只有在控制表814中存在同时匹配AGE和STATE的值的行,视图记录才是符合要求的。应该理解,控制判定可以用许多不同的方式将从控制表的记录中获取的值相组合,所述方式包括但不限于逻辑表达式(例如,AND、OR、NOT)、符号定界符(例如‘&’、‘,’)、列或行定界符等等。以这种方式,图5的源表504中满足由控制判定定义的所有约束的记录将被包含在局部物化视图800中。在图8的例子中,图5的源表中满足判定(AGE=18 and STATE=PA)或判定(AGE=18 andSTATE=MD)的唯一记录是源表504的第三行。结果是局部物化视图800只包括一行。
以下示出了图8的控制表814、局部物化视图800和查询表达式506的示例性声明CREATE TABLE TABLE_814(AGE int,STATE char(2),primary key(AGE,STATE))CREATE VIEW pmv800 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom TWHERE EXISTS(SELECT*FROM TABLE_814 ct WHERET.AGE=ct.AGE AND T.STATE=ct.STATECREATE UNIQUE CLUSTERED INDEX pmv800_cluON pmv800(ID)CREATE TABLE表达式创建带有参数列AGE和STATE的图8的控制表814。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图800中的图5的源表504(T)确定列。WHERE语句或者可选的EXISTS表达式引用了控制表TABLE_814,并确定包含在局部物化视图pmv800中的记录,即具有等于控制表ct814的某行的值的AGE值(T.AGE)且具有等于控制表TABLE_814的同一行的值的STATE值(T.STATE)的那些记录。CLUSTEREDINDEX表达式触发局部物化视图pmv800的创建。如上所述,控制表TABLE_814和所得的局部物化视图pmv800一开始没有任何记录。为了物化局部物化视图pmv800中的信息,用户可通过图2的客户端230或数据库服务器220的某个组件用值(18和‘PA’)来构造控制表TABLE_814的一行,用值(18和‘MD’)来构造控制表TABLE_814的另一行。正常增量视图维护于是可以用于正确地更新局部物化视图pmv800以包含当对照图8中所示的控制表TABLE_814求值时满足控制判定的记录。
图9图9示出了指定范围限制的控制判定908,其中由INCOME_LOW列930和INCOME_HIGH列931组成的控制表914提供了边界。任何适合的值的范围的指示会是适当的,包括数学运算符或符号(例如>、<、≥等等)、文本命令(例如GREATER THAN、LESS THAN等等)等等。INCOME HIGH和INCOMELOW列930、931指示了列INCOME所期望范围的限制。如图9所示,控制表914的第一行946指示“0-10K”的INCOME范围,控制表914的第二行948指示“≥100K”的INCOME范围。指示INCOME HIGH值的值会被设置成任何适当的值以指示适当的上界,诸如无穷大到指定≥100K。如图9所示,可以选择INCOME HGIH值大于源表504中所有可用的INCOME值。另一个合适的INCOME HIGH值可以是适当的,包括无值(例如INCOME HIGH字段是空或空指示符)、零值、任何小于INCOME LOW值的值、无穷大指示符、缺少INCOME HIGH字段等等。相似地,为了指示没有下界的范围,诸如≤100,可以为INCOME LOW字段使用任何适当的指示符,诸如0值、空字段、负值等等。所得的局部物化视图900包括由图5的查询表达式506指定的ID 524、AGE526、STATE 528和INCOME 530列,以及源表504和/或查询结果中具有落入由控制表914所指定的“0-10K”和“≥100K”范围内的INCOME值的所有行。
以下示出了图9的控制表914、局部物化视图900和查询表达式506的示例性声明CREATE TABLE TABLE_914(INCOME_LOW int,INCOME_HIGH int)CREATE VIEW pmv900 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom TWHERE EXISTS(SELECT*FROM TABLE_914 ct WHERET.INCOME>ct.INCOME_LOW AND
T.INCOME<ct.INCOME_HIGH)CREATE UNIQUE CLUSTERED INDEX pmv900_cluON pmv900(ID)CREATE TABLE表达式创建带有列INCOME LOW和INCOME HIGH的图9的控制表914。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图900中的图5的源表504(T)确定列。EXISTS语句引用控制表TABLE 914,并确定包含在局部物化视图pmv900中的记录,即图5的源表504(T)中具有控制表TABLE_914的某行中的INCOME LOW和INCOMEHIGH之间的INCOME值(T.INCOME)那些记录。CLUSTERED INDEX表达式触发局部物化视图pmv900的创建。如上所述,控制表TABLE_914和所得的局部物化视图pmv900没有任何记录。为了物化局部物化视图pmv900中的信息,用户可通过图2的客户端230或数据库服务器220的某个组件用值(例如0和10K、以及100K和999999K)来构造控制表的至少一行。正常增量视图维护于是可以用于正确地更新局部物化视图pmv900以包含当对照图9中所示的控制表TABLE_914求值时满足控制判定的记录。
图10图10所示的示例性控制判定1008使用控制表1014的INCOME_LOW列1050和INCOME_HIGH列1052同时指定了对STATE列1050的等式约束和范围约束。图5的源表504中同时满足两个约束的记录包含在局部物化视图1000中。在图10的例子中,一个记录满足STATE=PA且INCOME在0和10K之间的判定,一个记录满足STATE=MD且INCOME在0和10K之间的判定。在这个例子中,结果是局部物化视图100包括带有图5的查询表达式506所定义的列的两个记录。
以下示出了图10的控制表1014、局部物化视图1000和查询表达式506的示例性声明CREATE TABLE TABLE_1014(STATE char(2),INCOME_LOW int,INCOME_HIGH int)CREATE VIEW pmv1000 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom T
WHERE EXISTS(SELECT*FROM TABLE_1014 ct WHERET.STATE=ct.STATE ANDT.INCOME between ct.INCOME_LOW AND ct.INCOME_HIGH)CREATE UNIQUE CLUSTERED INDEX pmv 1000_cluON pmv1000(ID)CREATE TABLE表达式创建带有列STATE、INCOME LOW和INCOMEHIGH的图10的控制表1014。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图1000中的图5的源表504(T)确定列。EXISTS语句引用控制表ct1014并确定包含在局部物化视图pmv1000中的记录,即图5的源表504(T)中具有等于控制表TABLE_1014的某行的值的STATE值的STATE值(T.STATE),以及在控制表TABLE_1014的同一行中在INCOME LOW和INCOME HIGH值之间的INCOME值(T.INCOME)的那些记录。CLUSTERED INDEX表达式触发局部物化视图pmv1000的创建。如上所述,控制表TABLE_1014和所得的局部物化视图pmv1000一开始没有任何记录。为了物化局部物化视图pmv1000中的信息,用户可通过图2的客户端230或数据库服务器220的某个组件用值(PA、0和10K)来构造控制表ct1014的一行,用值(MD、0和10K)来构造控制表ct1014的另一行。正常增量视图维护于是可以用于正确地更新局部物化视图pmv1000,以包含满足控制判定的记录。
图11图11的示例性控制判定1108和控制表1114示出了约束可以基于除了比较操作符之外的其它操作符。在这种情况下,使用LIKE操作符,其字符串参数PATTERN由控制表1114中的行所提供。应该理解,其适用参数值由控制表提供的、除了LIKE之外的其它操作符也可以被等价地使用。在图11的例子中,控制表1114的第一记录1146选择包含以“N”结尾的STATE缩写和包含字符串“RET”的COMMENT值的记录,以包含在局部物化视图1100中。图11的控制表1114的第二记录1148选择包含以“P”开始的STATE缩写和等于词语“CHILD”的COMMENT属性的记录,以包含在局部物化视图1100中。如图11所示,‘%’符号匹配字符的任一序列,‘_’符号匹配任一单个字符。然而,逻辑操作的任何合适的指示符和/或通配符值可以适用,包括符号、文本串、列标签等等。所得的局部物化视图1100包括由查询表达式506指定的ID、AGE、STATE和INCOME列,和满足由控制判定1108和控制表1114指定的限制的记录。
以下示出了图11的控制表1114、局部物化视图1100和查询表达式506的示例性声明CREATE TABLE TABLE_114(STATE char(2),PATTERN varchar(50))CREATE VIEW pmv1100 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOMEFrom TWHERE EXISTS(SELECT*FROM TABLE_1114ct WHERET.STATE LIKE ct.STATE ANDT.COMMENT LIKE ct.PATTERNCREATE UNIQUE CLUSTERED INDEX pmv1100_cluON pmv1100(ID)CREATE TABLE表达式创建带有列STATE和PATTERN的图11的控制表1114。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图1100中的图5的源表504(T)确定列。EXISTS语句引用控制表TABLE_1114,并确定包含在局部物化视图pmv1100中的记录,即图5的源表504(T)中具有等于控制表TABLE_1114的某行的STATE值的STATE值(T.STATE),以及匹配控制表TABLE_1114的同一行的PATTERN列中LIKE模式的COMMENT值(T.INCOME)的那些记录。CLUSTERED INDEX表达式触发局部物化视图pmv1100的创建。如上所述,控制表ct1114和所得的局部物化视图pmv1100一开始没有任何记录。为了物化局部物化视图pmv1100中的信息,用户可通过图2的客户端230或数据库服务器220的某个组件用值(‘N’和‘%RET’)来构造控制表TABLE_1114的一行,用值(‘P’和‘CHILD’)来构造控制表TABLE_1114的另一行。正常增量视图维护于是可以用于正确地更新局部物化视图pmv1100,以包含满足控制判定的记录。
图12图12示出了多个控制判定和控制表可用于标识哪些记录要包含在局部物化视图中。例如,多个控制判定可用‘OR’操作符连接,这样使得如果记录满足任一控制判定,它就被包括在局部物化视图中。在图12所示的例子中,总控制判定1208由两个用‘OR’连接的单独的控制判定(1210和1212)组成,其中每个判定引用单独的控制表(分别是1260和1262)。如图12中所示的,所得的局部物化视图1200包括四个记录,其中AGE=18、AGE=21或STATE=’MD’,其列由图5的查询表达式506指定。在另一个例子中,在总控制判定1208中控制判定1210和1212由‘AND’操作符连接,所得的局部物化视图会包括(AGE=18AND STATE=‘MD’)或(AGE=21AND STATE=’MD’)的所有记录。
以下示出了图12的控制表1260、控制表1262、局部物化视图1200和查询表达式506的示例性声明CREATE TABLE TABLE_1260(AGE int)CREATE TABLE TABLE_1262(STATE char(2))CREATE VIEW pmv1200 WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOME,1 AS COUNTFrom TWHERE EXISTS(SELECT*FROM TABLE_1260ct WHERET.AGE=ct.AGE)OREXISTS(SELECT*FROM TABLE_1262 ct WHERET.STATE=ct.STATE)CREATE UNIQUE CLUSTERED INDEX pmv1200_cluON pmv1200(ID)CREATE TALBE表达式分别用列AGE和STATE创建图12的控制表1260和1262。查询表达式SELECT T.ID,T.AGE,T.STATE,T.INCOME从包含在局部物化视图1200中的图5的源表504(T)确定列。EXISTS语句引用控制表TALBE_1260和TABLE_1262,并确定包含在局部物化视图pmv1200中的记录,即图5的源表504(T)中具有等于控制表TABLE_1260的某行的AGE值的AGE值(T.AGE),或具有等于控制表TABLE_1262的某行的STATE值的STATE值(T.STATE)的那些记录。CLUSTERED INDEX表达式触发局部物化视图pmv1200的创建。如上所述,控制表TABLE_1260和1262和所得的局部物化视图pmv1200没有任何记录。为了物化局部物化视图pmv1200中的信息,用户可通过图2的客户端230或数据库服务器220的某个组件用值(18、21或‘MD’)来构造控制表TABLE_1260、TABLE_1262的至少一行。正常增量视图维护于是可以用于正确地更新局部物化视图pmv1200。以包含满足视图的控制判定的记录。
在多个控制判定定义了包含在局部物化视图中的记录之处,一个或多个列会被加到局部物化视图中,以指示控制判定和控制表行的数目和/或身份,其中的每条记录有资格包含在局部物化视图中。在图12所示的例子中,对于局部物化视图1200的每条记录,COUNT列1264的值等于来自源表504的相应记录所满足的控制判定的数目。
当修改或删除控制表时,这样的附加列可以用于确定要删除局部物化视图的哪些记录。例如,如图12所示,只有在COUNT值大于零时,局部物化视图的记录才会保留在局部物化视图1200中。如果COUNT值是零,必须从局部物化视图删除记录,因为它不满足任何的控制判定。在图12的例子中,如果从第一控制表1260中删除值“21”,那么会从局部物化视图中删除第二和第三行1268、1270,因为这些行的COUNT会减少到零。如果从第一控制表1260中删除值“18”,那么不会从局部物化视图1200中删除行。更具体地,局部物化视图1200的第一行1266不再满足经修改的第一控制判定1210,因为AGE=18被删除了。然而,第一行1266仍将满足第二控制判定1212,因为STATE=MD。结果是第一行1266的COUNT值将从“2”减少“1”,指示依照经修改的控制表,该记录是局部物化视图1200中的有效条目。在可选安排中,可包括任何适当的指示符,诸如多个计数列、标识控制表中行的列、附加的辅助表格等等,这以某种方式指示了判定和控制表行怎样和/或哪些控制判定和控制标有资格被包含在局部物化视图中。
动态控制表控制表可以用于以多种方式操纵或限制包含在局部物化视图中的记录。例如,参见图5,可以采用控制表使得视图的最近被访问的记录被维护在局部物化视图500中。随着访问模式的改变,控制表可以被调整(自动或手动)以将视图最近被访问的行保存在局部物化视图中。例如,局部物化视图、源表或其它视图可包括指示视图的记录被访问次数的列。控制表可诸如指示预定时间段或访问次数中最小阀值的范围限制等在判定中包括那个ACCESS计数参数。由于ACCESS计数参数值是随着时间被修改的,局部物化视图可以用视图维护自动更新,以从局部物化视图中淘汰不用的或较少使用的记录,和/或包括来自源表的新近较多使用的记录。
公用控制表多个局部物化视图可以引用或依赖于一公用控制表。更具体地,不同的局部物化视图可以共享一公用控制表。例如,如图6所示,控制表614可以控制局部物化视图600以及其它局部物化视图。更具体地,另一个局部物化视图可以具有引用源表、不同的判定限制和/或不同的参数包含/排除的视图定义表达式。
局部物化视图作为控制表局部物化视图可以将自身用作另一局部物化视图的控制表。参见图9,控制表914控制局部物化视图900,以包括具有在定义范围内的INCOME的记录。在某些情况下,对数据库的查询会请求供应商处于包括在局部物化视图900中的顾客所属的国家。因此,会用引用供应商源表(未示出)的查询表达式和依赖于图9的局部物化视图900的STATE列的控制判定来创建第二局部物化视图。因此这个第二局部物化视图会包括PA、MD、OH、NY、CA和WA中的供应商的记录。从而,控制表914控制局部物化视图900,其进而控制供应商的第二局部物化视图。
用户定义函数控制表可以指定用户定义函数的值或应用到一列的其它表达式而非实际列值。以这种方式,控制判定会引用用户定义函数,且控制表会把输入值提供给该用户定义函数。在一个例子中,用户可定义函数BRACKET,其基于给定的收入水平确定税级。以这种方式,参见图3的查询表达式306和源表304,可创建所标识的税级内记录的局部物化视图。更具体地,视图定义表达式318会在控制判定中包括用户定义函数BRACKET,且控制表指定感兴趣的税级。下面进一步讨论的以下示例性定义可基于包括用户定义函数BRACKET并引用图5的源表504作为T的控制判定来物化局部物化视图。
CREATE TABLE ctTAX(bracketID int primary key)CREATE VIEW pmv WITH SCHEMABINDING ASSELECT T.ID,T.AGE,T.STATE,T.INCOME
From TWHERE EXI STS(SELECT*FROM ctTAX ct WHEREBRACKET(T.INCOME)=ct.bracketID)CREATE UNIQUE CLUSTERED INDEX pmv_cluON pmv(ID)局部视图组术语局部视图组可以标识一组相关的局部视图和控制表,其内容由一个或多个控制表的值直接或间接控制。局部视图组中的那些视图可以被称为“链接的局部视图”。例如,局部视图组可以包括局部物化视图pmv,控制表可以包括控制表Ct。
局部视图组可被示出为有向图,其中节点表示控制表或局部视图,边表示控制约束(由控制判定定义)。控制约束的边的方向是从局部视图到其控制表。
图14-17示出了局部视图的例子。图14示出了局部视图(C)使用另一个局部视图(B)作为控制表的情况。在图15中,两个局部视图(B和C)共享一公用控制表(A)。应该理解,视图B和C不必使用同一控制判定。图16示出了当局部视图(C)具有两个控制表(A和B)的情况。图17示出了不同局部视图的组合。
现有数据库系统(包括Microsoft SQL Server)中的视图不能直接或间接地引用它们自身,因为这样的循环使得视图扩展和视图维护复杂化。结果是局部物化视图也继承这个特性。相应地,局部视图组的有向图中可能不存在循环。以这种方式,拓扑次序总是存在于局部视图中。因此可以正确地维护局部视图的任何堆栈。
为查询求值使用局部物化视图在诸如Microsoft SQL Server等现代关系型数据库中,查询Q的求值包括两个步骤1.查询编译(也称为查询优化)。该步骤可确定执行查询和生成查询执行计划最有效的方法。如果对输入查询已经存在执行计划,一般跳过该步骤。
2.查询执行。这个步骤依照计划执行查询,由此产生查询结果。
为了确定是否可以从局部物化视图中计算新接收到的查询表达式Q,可使用视图匹配算法。在Goldstein和Larson的“Optimizing Queries UsingMaterialized ViewsA Practical Scalable Solution,”SIGMOD,2001中描述了用于完全物化视图的视图匹配算法的例子,该文通过引用包含于此。Goldstein和Larson的算法评估是否可以从完全物化视图V中计算出查询表达式Q,且该算法在图18的方法1800中示出。数据库服务器确定(1802)视图V是否包含查询Q所需的所有行。如果是,那么数据库服务器确定(1804)所需的行是否可以从视图V中选出、确定(1806)是否可从视图V的输出列计算出查询Q的所有输出列、确定(1808)是否需要聚集,以及如果是,确定(1810)视图V中所需的列是否可用。
如果视图是完全物化的,那么图18的方法1800都可以在编译时间完成。然而,如果视图是局部物化的,那么局部物化视图的实际内容受到控制判定和其控制表的内容的限制。换言之,在局部物化视图中当前物化的行在执行时间之前是未知的。因此,在图18的视图匹配算法中,对视图V包含查询Q所需的所有行的确定1802不应该被修改以支持局部物化视图。即,确定1802可以被分为编译时测试和执行时测试。其它步骤保持不变且都能在编译时完成。
支持局部物化视图的视图匹配方法1300的一个例子在图13的流程图中示出。最初,可接收(1302)查询或部分查询。例如,图2的数据库服务器220可接收来自客户端工具230的查询,并将其转发到负责视图匹配的数据库组件。这个视图匹配组件接着在可用视图中选择一视图来考虑(1203),该视图在接下来的描述中被假设为局部物化视图。任何适当的视图匹配算法可以用于选择要考虑的视图。查询可以引用一个或多个源表,且可以包括其值在查询执行时提供的一个或多个参数。下面示出的示例性查询Q将会在本节中用于说明描述,虽然应该理解这个查询只是一个例子,可以使用任何适当的查询。
QUERY QSELECT T.ID,T.AGE,T.STATE,T.INCOMEFROM TWHERE T.AGE>10 AND T.STATE=’MD’在这个例子中,图2的数据库210可包含先前定义且在图6中示出的局部物化视图pmv600。在查询Q优化期间,图2的数据库服务器220的优化器会试图确定是否可以从局部物化视图pmv600中计算查询。因为在查询Q的运行时间之前不知道哪些记录存在于局部物化视图pmv600中,因此确定局部物化视图是否包含所有所需的记录的部分被延迟到查询Q的运行时间,例如执行时测试。然而,确定局部物化视图是否包含所有所需的记录的部分会在查询的编译时完成,例如编译时测试。
在编译时期间,包含优化器或其它适当组件的数据库服务器可通过确定(1304)局部物化视图是否将包含查询所需的所有记录(如果它是完全物化的)来执行编译时测试。可以通过消除来自视图定义表达式的所有控制判定来获取完全物化视图的定义,可以使用适当的视图匹配算法来确定编译时测试,诸如参见图18所描述的确定(1802)视图是否包含查询Q所需的所有行。如果测试是否定的,那么可创建(1306)查询执行计划1306,该查询执行计划从基表并可能也基于不同于当前考虑的视图的物化视图来计算查询结果。在某些情况下,源表可以用于计算查询,在其它情况下,可以从局部物化视图中计算查询的至少一部分,接着将其与从其它源计算出的数据相结合以提供所需的记录。
对于示例性查询Q和视图pmv600,因为局部物化视图的完全物化版本会包含表504(T)的所有行,因此编译时测试被求值为真。如果编译时测试被求值为真,那么接着会对上文参见图18所描述的视图匹配过程中的剩余测试1804、1806、1808和1810进行求值(1308)。如果1308的这些测试中的任何一个失败,那么当前局部物化视图不能被查询所使用。因此,可以基于基表或其它适当的视图创建(1306)查询执行计划。
如果测试1308成功,那么可构建(1312)验证局部物化视图是否包含查询所需的记录的保证判定。保证判定实现执行时测试。对于上述的示例性查询Q和局部物化视图pmv600,数据库系统200的优化器或其它适当组件可试图构建保证判定,该保证判定验证要在查询Q的执行时求值的查询所需的行是否存在于pmv600中。然而,保证判定的形式取决于所使用的控制判定和控制表的类型,不可能总是能构建正确的保证判定。例如,如果在上述示例性查询Q中对T.STATE的判定被修改为T.STATE<>‘MD’,那么不能构建有效的保证判定,因为不可能确定局部物化视图是否包含STATE≠‘MD’的所有行。
如果不能构建保证判定测试,那么局部物化视图会被拒绝,且会创建(1306)从基表和/或其它视图计算查询的查询执行计划。如果确定了有效的保证判定,那么会在查询的编译时构建(1320)一动态查询计划。可从以下三个组件构建动态查询计划保证判定、主要计划片断和撤退计划片断。可构建(1316)主要计划片断以便在保证判定被求值为真的情况下使用局部物化视图。可以构建(1318)撤退计划以便从基表和/或其它视图计算在保证判定被求值为假的情况下使用的查询。接着可以将这三个组件与一般称为SwitchUnion或ChoosePlan操作符的计划选择操作符相组合来构建(1320)动态查询执行计划。如果保证判定被求值为真,那么执行时测试会选择主要计划,如果保证判定被求值为假,那么执行时测试会选择撤退计划来计算查询。
以下将进一步讨论用于不同类型的控制判定和控制表的保证判定的构建。
用于等式控制表的保证判定等式控制表可以是支持等式控制判定的表。图6、7、8和12各自的控制表614、714、814和1214,以及它们各自的局部物化视图600、700、800和1200是这种类型的。等式控制表的保证判定可以被表达为对于控制表的查找查询,它用于验证带有匹配值的行是否存在于控制表中。例如,参见图7,假设接收到以下查询SELECT T.ID,T.AGE,T.STATE,T.INCOMEFROM TWHERE T.ID=@ID@ID是其值在运行时已知的参数。假如控制表TABLE_714包含带有等于参数@ID的值的ID值的行,那么可以从局部物化视图pmv700中计算出上述示例性查询。由此,可以如下表达(使用SQL)保证判定EXISTS(SELECT*FROM TABLE_714 WHERE ID=@ID)当将这个保证判定求值为执行时测试时,它需要精确的匹配。更具体地,只有在@ID的实际值出现在控制表TABLE_714中时保证判定才为真。
在另一个例子中,查询可包括一IN判定,如下示出SELECT T.ID,T.AGE,T.STATE,T.INCOMEFROM TWHERE T.ID IN(1,5,8,12)AND T.STATE=‘MD’如果控制表TABLE_714包含值1、5、8和12,那么也可以从pmv700计算出查询。因此,保证判定成为(使用SQL作为例子)EXISTS(SELECT*FROM TABLE_714 WHERE ID IN(1,5,8,12)HAVING COUNT(*)=4)
条件T.STATE=‘MD’不包含在保证判定中,因为没有在pmv700的控制判定中引用T.STATE,例如记录是否被物化不取决于其STATE值。
这两个查询覆盖了可以从带有等式控制表的局部物化视图计算出的查询的主要类型,即查询必须将控制判定引用的列约束为在运行时已知的有限数目的值。当将保证判定求值为执行时测试时,接着会验证所述的值是否存在于控制表中。
用于范围控制表的保证判定带有范围控制表的局部物化视图可支持带有范围判定的查询。图9的控制表914及其局部物化视图900是这个类型的。用于范围控制表的保证判定可以表达为评估查询中指定的范围是否包含在控制表指定的至少一个范围内的查询。
例如,参见图9,考虑以下查询SELECT T.ID,T.AGE,T.STATE,T.INCOMEFROM TWHERE T.INCOME>12K AND T.INCOME<24K该查询指定12K到24K的INCOME范围,并且如果控制表TABLE_914中存在包括查询范围的行,那么可以从局部物化视图pmv900中计算出该范围。因此,保证判定被构建为(使用SQL)EXISTS(SELECT*FROM TABLE_914ctWHERE INCOME_LOW<=12K AND INCOME_HIGH>=24K)该示例性保证判定要求所期望的范围包括在控制表的单一记录中。然而,应该理解,在某些情况下,评估控制表的多个记录是否会共同地覆盖所期望的范围。类似地,应该理解,带有范围控制表的局部物化视图也可以用于指定等式或IN约束的查询,因为这样的约束可以被重写为范围约束。
用于带有等式和范围约束的控制表的保证判定图10所示的物化视图pmv1000具有指定对STATE的等式约束和对INCOME的范围约束的控制判定和控制表。不能从视图pmv1000计算出查询,除非它对STATE和INCOME列都指定了适当的限制。举例而言,考虑以下查询
SELECT T.ID,T.AGE,T.STATE,T.INCOMEFROM TWHERE T.STATE=‘PA’AND T.INCOME>5K AND T.INCOME<9K如果在控制表TABLE_1014中存在一行,其STATE值等于‘PA’且范围覆盖查询的范围,则可以从局部物化视图pmv1000中计算出查询。基于此,以下保证判定可以构建(用SQL)为EXISTS(SELECT*FROM TABLE_1014ctWHERE ct.STATE=‘PA’AND ct.INCOME_LOW<=5K AND ct.INCOME_HIGH>=9K)参见图10,控制表TABLE_1014中的第一行满足保证判定,因此可以从视图pmv1000中计算出查询。即使这个例子只考虑结合等式约束和范围约束的控制表的情况,应该理解,类似的推理可以应用于组合多种类型条件的控制表。
多个控制表局部物化视图可以具有多个控制表。保证判定和可以从相应的局部物化视图计算出的查询的类型取决于控制判定如何使用控制表。图12所示的局部物化视图pmv1200具有两个控制表,其每一个用在用OR连接的单独的控制判定中。由此,可以将视图作为两个单独的局部物化视图来处理,一个由控制表TABLE_1260控制,另一个由控制表TABLE_1262控制。以这个方式,局部物化视图1200可以用于带有对T.AGE的等式约束的查询,也可用于带有对T.STATE的等式约束的查询。这个例子的保证判定可以用先前对等式控制表所描述的方式来构建。在这种情况下,两个控制表1260、1262都是等式控制表,但是应该理解,可以用类似的方式来处理其它类型的控制表。
现在已经描述了本发明的一些说明性实施例,对于本领域的技术人员应该显而易见的是,以上内容只是说明性的而非限制性,只是以举例的方式来示出。许多修改和其它说明性实施例都在本领域普通技术人员的范围内,并且被构想为落入本发明的范围内。特别地,虽然这里所示的许多实例涉及方法操作或系统元素的特定组合,然而应该理解,那些操作和那些元素可以用其它的方式组合以完成相同的目标。只结合一个实施例所讨论的操作、元素和特征不是意在被排除在其它实施例中相似的功能之外。而且,在权利要求中使用序数术语(诸如“第一”和“第二”)来修改权利要求元素,其自身并不意味着一个权利要求元素对于另一个权利要求元素的任何优先级、优先次序或顺序,或执行方法操作的时间顺序,而只是用作将具有某个名称的一个权利要求元素与具有同一名称(但使用序数术语)的另一个元素相区分的标签,以便区分权利要求元素。
权利要求
1.一种局部物化数据库记录的视图的方法,所述方法包括a)定义一个或多个源表中的记录的视图;b)标识要物化的视图的记录的子集;c)存储所述记录子集以局部物化所述视图。
2.如权利要求1所述的方法,其特征在于,标识物化的记录的子集包括引用一个或多个控制表的控制判定。
3.如权利要求2所述的方法,其特征在于,还包括改变一个或多个控制表,且响应于经改变的一个或多个控制表,更新所述记录子集。
4.如权利要求3所述的方法,其特征在于,改变所述一个或多个控制表包括改变控制表的列和字段的至少一个的值。
5.如权利要求3所述的方法,其特征在于,改变所述一个或多个控制表包括将数据记录添加到至少一个控制表。
6.如权利要求3所述的方法,其特征在于,改变所述一个或多个控制表包括从至少一个控制表中删除数据记录。
7.如权利要求1所述的方法,其特征在于,还包括更新所述一个或多个源表的至少一个记录,且作为响应自动更新所存储的记录子集。
8.如权利要求7所述的方法,其特征在于,自动更新包括使用视图维护算法。
9.如权利要求2所述的方法,其特征在于,还包括在改变一个或多个控制表之前,接收一查询,并作为响应编译一查询计划,并在改变一个或多个控制表之后使用所编译的查询计划执行所述查询。
10.如权利要求1所述的方法,其特征在于,还包括在所述查询的执行时确定查询是否能将所述局部物化视图用作查询执行计划的一部分。
11.如权利要求10所述的方法,其特征在于,确定查询是否能使用所述局部物化视图包括确定所述查询的运行时常数是否包括在至少一个控制表记录中。
12.如权利要求11所述的方法,其特征在于,确定所述查询的多个运行时常数是否包含在多个控制表记录中。
13.一种数据结构,包括a)一视图定义表达式,它包括一查询表达式和至少一个控制判定,所述查询表达式引用一个或多个源表,所述控制判定引用一个或多个控制表,所述视图定义表达式标识所述查询表达式的结果中要包含在一局部物化视图中的记录的子集。
14.如权利要求13所述的数据结构,其特征在于,还包括一被构建和适用于存储所述记录子集的局部物化视图。
15.如权利要求13所述的数据结构,其特征在于,还包括由所述控制判定所引用的一个或多个控制表。
16.如权利要求13所述的数据结构,其特征在于,所述控制表包括标识所述记录子集的多个控制表。
17.如权利要求13所述的数据结构,其特征在于,所述控制表包括储存在关系型数据存储中的表。
18.如权利要求13所述的数据结构,其特征在于,所述控制判定的表达式包括用户定义函数。
19.如权利要求13所述的数据结构,其特征在于,所述控制判定引用第二局部物化视图。
20.如权利要求13所述的数据结构,其特征在于,所述控制判定指定至少一个等价约束。
21.如权利要求13所述的数据结构,其特征在于,所述控制判定指定上界和下界的至少一个。
22.如权利要求13所述的数据结构,其特征在于,所述控制判定指定用于标识物化的记录子集的上界和下界的至少一个。
23.如权利要求13所述的数据结构,其特征在于,所述控制判定指定要排除在所述局部物化视图之外的记录的指示符。
24.一个或多个包含可执行指令计算机可读介质,当所述指令被执行时,实现一种方法,包括a)基于视图定义表达式和至少一个源表,存储至少一个记录以局部物化查询结果的视图;b)接收包括查询判定的查询;c)确定所述局部物化视图是否包含所述查询判定所需的所有记录;d)如果所述局部物化视图包含所述查询判定所需的所有记录,则从所述局部物化视图中计算所述查询。
25.如权利要求24所述的一个或多个计算机可读介质,其特征在于,所述方法还包括如果所述局部物化视图不包含所述查询判定所需的所有记录,则对至少一个源表计算至少一部分所述查询。
26.如权利要求24所述的一个或多个计算机可读介质,其特征在于,确定所述局部物化视图是否包含所述查询判定所需的所有记录包括对所述查询的编译时测试和执行时测试进行求值。
27.如权利要求26所述的一个或多个计算机可读介质,其特征在于,所述编译时测试包括通过从所述视图定义表达式中删除控制判定来形成完全物化视图表达式,以及确定从所述完全物化视图表达式所得的完全物化视图是否将包含所述查询判定所需的所有记录。
28.如权利要求27所述的一个或多个计算机可读介质,其特征在于,确定所述局部物化视图是否包含查询判定所需的所有记录包括创建包括至少一个条件的保证判定,所述条件引用所述查询判定的执行时常数和至少一个控制表的至少一部分。
29.如权利要求28所述的一个或多个计算机可读介质,其特征在于,创建所述保证判定包括生成一查询判定,所述查询判定评估所述至少一个控制表的运行时常数和参数值之间的等价性。
30.如权利要求28所述的一个或多个计算机可读介质,其特征在于,创建所述保证判定包括生成一查询判定,所述查询判定将所述至少一个控制表的运行时常数和范围参数值作比较。
31.如权利要求28所述的一个或多个计算机可读介质,其特征在于,还包括生成一动态查询计划,它包括所述保证判定、引用所述局部物化视图的主要计划片断、以及引用一个或多个源表的撤退计划片断。
32.如权利要求28所述的一个或多个计算机可读介质,其特征在于,对所述执行时测试求值包括对所述保证判定求值。
33.如权利要求32所述的一个或多个计算机可读介质,其特征在于,还包括如果所述保证求值为真,则基于所述主要计划片断计算所述查询。
34.如权利要求32所述的一个或多个计算机可读介质,其特征在于,还包括如果所述保证求值为假,则基于所述撤退计划片断计算所述查询。
35.如权利要求26所述的一个或多个计算机可读介质,其特征在于,在所述查询的执行时对所述执行时测试进行求值。
36.包含可执行组件的一个或多个计算机可读介质,包括a)用于存储局部物化视图、控制表和一个或多个源表的装置;b)用于接收查询的装置;c)用于编译所述查询的装置,包括用于如果查询被完全物化,确定所述局部物化视图是否将包含查询所需的所有记录的装置、用于创建保证判定的装置、以及用于创建包括所述保证判定的动态查询计划的装置;以及d)用于基于所述动态查询计划和在所述查询执行时对所述保证判定的求值执行所述查询的装置。
全文摘要
本发明描述了数据库系统领域中的局部物化视图。局部物化从一个或多个源表计算出的视图的方法包括生成包含查询表达式和引用至少一个控制表的至少一个控制判定的视图定义。该查询表达式指定视图的最大内容,即,可以被物化的记录的完整集合。一个或多个控制判定和一个或多个控制表的内容限制实际上物化和在视图中存储哪些记录。这允许通过更新一个或多个控制表简单地调整局部物化视图的内容。
文档编号G06F17/30GK1763744SQ200510092708
公开日2006年4月26日 申请日期2005年8月18日 优先权日2004年10月21日
发明者J·周, J·D·戈尔茨坦, P·-A·拉森 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1