CN115485675A - 用于物化视图选择的sql含义决策器 - Google Patents
用于物化视图选择的sql含义决策器 Download PDFInfo
- Publication number
- CN115485675A CN115485675A CN202180029784.9A CN202180029784A CN115485675A CN 115485675 A CN115485675 A CN 115485675A CN 202180029784 A CN202180029784 A CN 202180029784A CN 115485675 A CN115485675 A CN 115485675A
- Authority
- CN
- China
- Prior art keywords
- query
- previously received
- filter
- new
- new query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24539—Query rewriting; Transformation using cached or materialised query results
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
- G06F16/244—Grouping and aggregation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
用于管理查询(134)的系统(100)和方法(200)包括:接收包括第一多个连接项的新查询(210),从存储器访问数据库的过滤视图,该过滤视图由先前接收的查询根据由第二多个连接项表示的过滤器过滤(220),第一多个连接项或第二多个连接项中的至少一个包括至少一个NULL值,确定新查询的过滤器暗示先前接收的查询的过滤器(230),以及基于对新查询的过滤器暗示先前接收的查询的过滤器的确定,使用先前接收的查询的过滤视图执行新查询(240)。
Description
相关专利申请的交叉引用
本申请是2021年8月3日提交的第17/392,728号美国专利申请的延续,所述美国专利申请要求2020年9月2日提交的第63/073,746号美国临时专利申请的申请日的权益,这些申请的公开内容特此以引用方式并入本文中。
背景技术
本技术总体上涉及一种用于使用物化视图加速SQL查询处理的方法和系统。
通常,与数据集的标准视图相比,可以使用数据集的物化视图加速查询处理。物化视图可能已经存储在表中并且可能在接收新查询之前已经索引化。如果物化视图能够被用于处理新查询,则可以显著地减少处理时间。
确定物化视图是否能够被用于处理新查询需要确定给定的所存储物化视图的过滤数据是否包括正确地且完整地响应查询所需的所有信息。这可以通过确定是否能够将新查询重写为产生物化视图的先前查询,或者换句话说,确定新查询是否满足或暗示先前查询来实现。可以使用SAT(满意度)或UNSAT(不满意度)检查算法进行该确定。然而,传统SAT和UNSAT检查算法不支持SQL查询。这是因为SQL支持NULL值。NULL值的不确定值增加一层不确定性,使得使用已知的SAT和UNSAT检查算法无法确定一个查询是否暗示另一个查询。此外,SAT和UNSAT检查算法具有较高的计算复杂度,因此它们在数据库查询重写和优化的上下文中的应用没有吸引力。
发明内容
本公开的一个方面涉及一种方法,包括:由一个或多个处理器接收包括第一多个连接项的新查询;由所述一个或多个处理器从存储器访问数据库的过滤视图,其中根据由第二多个连接项表示的过滤器,过滤视图由先前接收的查询过滤,其中第一多个连接项或第二多个连接项中的至少一个包括至少一个NULL值;确定新查询的过滤器暗示先前接收的查询的过滤器;以及基于对新查询的过滤器暗示先前接收的查询的过滤器的确定,使用先前接收的查询的过滤视图执行新查询。该方法的优点是能够快速地确定在对新查询的评估中重复使用先前计算的过滤视图的机会,从而揭露引起对新执行的更快的执行的优化机会。
在一些示例中,确定新查询的过滤器暗示先前接收的查询的过滤器可以包括:重写新查询和先前接收的查询以共享一组共同变量;以析取范式重写新查询;以合取范式重写先前接收的查询;以及确定重写的新查询的每个项暗示重写的先前接收的查询的每个项,其中对新查询暗示先前接收的查询的确定是基于重写的新查询的每个项暗示重写的先前接收的查询的每个项。
在一些示例中,先前接收的查询或新查询可以包括分组操作,并且确定新查询的过滤器暗示先前接收的查询的过滤器可以包括:在以析取范式重写新查询并且以合取范式重写先前接收的查询之前,移除先前接收的查询或新查询中指代不是分组操作的键的列的项。
在一些示例中,确定新查询的过滤器暗示先前接收的查询的过滤器可以包括:在以析取范式重写新查询并且以合取范式重写先前接收的查询之前,移除先前接收的查询和新查询中结构上等效的项。
在一些示例中,所述方法可以进一步包括:在移除先前接收的查询和新查询中结构上等效的项之后,部分地基于没有任何剩余项指代不是分组键的列,确定新查询的过滤器暗示先前接收的查询的过滤器。
在一些示例中,确定新查询的过滤器暗示先前接收的查询的过滤器可以包括:将新查询和先前接收的查询重写为谓词,所述谓词将新查询确立为真并且将先前接收的查询确立为假或NULL;以析取范式重写谓词;以及确定重写的谓词的每个项与自身不兼容。对新查询的过滤器暗示先前接收的查询的过滤器的确定可以基于重写的谓词的每个项与自身不兼容。
在一些示例中,所述方法可以进一步包括:在以析取范式重写谓词之前,对将先前接收的查询表示为NULL的谓词的至少一部分进行简化。
在一些示例中,所述方法可以进一步包括:由一个或多个处理器接收包括第三多个连接项的第二新查询;由所述一个或多个处理器从存储器访问先前接收的查询的过滤视图,其中第二多个连接项或第三多个连接项中的至少一个包括至少一个NULL值;由所述一个或多个处理器确定第二新查询的过滤器并不暗示先前接收的查询的过滤器;以及响应于确定第二新查询的过滤器并不暗示先前接收的查询的过滤器,对数据库执行第二新查询。
在一些示例中,确定第二新查询的过滤器并不暗示先前接收的查询的过滤器可以包括:将第二新查询和先前接收的查询重写为谓词,所述谓词将第二新查询确立为真并且将先前接收的查询确立为假或NULL;以析取范式重写谓词;以及确定重写的谓词的至少一个项不与自身不兼容,其中确定第二新查询的过滤器并不暗示先前接收的查询的过滤器基于重写的谓词的所述至少一个项不与自身不兼容。
在一些示例中,确定第二新查询的过滤器并不暗示先前接收的查询的过滤器可以包括:重写第二新查询和先前接收的查询以共享一组共同变量;以析取范式重写第二新查询;以合取范式重写先前接收的查询;以及确定重写的第二新查询的至少一个项并不暗示重写的先前接收的查询的至少一个项,其中对新查询并不暗示先前接收的查询的确定是基于重写的第二新查询的至少一个项并不暗示重写的先前接收的查询的至少一个项。
本公开的另一方面涉及一种系统,所述系统包括用于存储指令的存储器以及被耦合到存储器的一个或多个处理器。所述一个或多个处理器可以被配置成:执行所存储的指令,以接收包括第一多个连接项的新查询,从存储器访问由先前接收的查询根据过滤器过滤的数据库的过滤视图,其中过滤视图由第二多个连接项表示,并且其中第一多个连接项或第二多个连接项中的至少一个包括至少一个NULL值;确定新查询的过滤器暗示先前接收的查询的过滤器;以及基于对新查询的过滤器暗示先前接收的查询的过滤器的确定,使用数据库的过滤视图执行新查询。
在一些示例中,所述一个或多个处理器可以被配置成:执行所存储指令,以重写新查询和先前接收的查询以共享一组共同变量;以析取范式重写新查询,以合取范式重写先前接收的查询,以及确定重写的新查询的每个项暗示重写的先前接收的查询的每个项,其中对新查询暗示先前接收的查询的确定是基于重写的新查询的每个项暗示重写的先前接收的查询的每个项。
在一些示例中,先前接收的查询或新查询包括分组操作。确定新查询的过滤器暗示先前接收的查询的过滤器可以包括:在以析取范式重写新查询并且以合取范式重写先前接收的查询之前,移除先前接收的查询或新查询中指代不是分组操作的键的列的项。
在一些示例中,所述一个或多个处理器可以被配置成执行所存储指令,以在以析取范式重写新查询并且以合取范式重写先前接收的查询之前,移除先前接收的查询和新查询中结构上等效的项。
在一些示例中,所述一个或多个处理器可以被配置成执行所存储的指令以:将新查询和先前接收的查询重写为谓词,所述谓词将新查询确立为真并且将先前接收的查询确立为假或NULL,以析取范式重写谓词,以及确定重写谓词的每个项与自身不兼容。对新查询的过滤器暗示先前接收的查询的过滤器的确定可以基于重写谓词的每个项与自身不兼容。
在一些示例中,所述一个或多个处理器可以被配置成执行所存储指令以在以析取范式重写谓词之前,对将先前接收的查询表示为NULL的谓词的至少一部分进行简化。
在一些示例中,所述一个或多个处理器可以被配置成:执行所存储的指令以由一个或多个处理器接收包括第三多个连接项的第二新查询,由所述一个或多个处理器从存储器访问先前接收的查询的过滤视图,其中第二多个连接项或第三多个连接项中的至少一个包括至少一个NULL值,由所述一个或多个处理器确定第二新查询的过滤器并不暗示先前接收的查询的过滤器,以及响应于对新查询的过滤器并不暗示先前接收的查询的过滤器的确定,对数据库执行新查询。
在一些示例中,所述一个或多个处理器可以被配置成:执行所存储指令以将第二新查询和先前接收的查询重写为谓词,所述谓词将第二新查询确立为真并且将先前接收的查询确立为假或NULL,以析取范式重写谓词,以及确定重写谓词的至少一个项不与自身不兼容。对第二新查询的过滤器并不暗示先前接收的查询的过滤器的确定可以基于重写谓词的所述至少一个项不与自身不兼容。
在一些示例中,所述一个或多个处理器可以被配置成:执行所存储指令以重写第二新查询和先前接收的查询以共享一组共同变量,以析取范式重写第二新查询,以合取范式重写先前接收的查询,以及确定重写的第二新查询的至少一个项并不暗示重写的先前接收的查询的至少一个项。对新查询并不暗示先前接收的查询的确定可以基于重写的第二新查询的至少一个项并不暗示重写的先前接收的查询的至少一个项。
本公开的又一方面涉及一种数据中心,所述数据中心包括:用于存储数据库以及数据库的至少一个物化视图的多个服务器,其中物化视图由先前接收的查询根据过滤器过滤,以及本文所描述的示例系统中的任一个。
在一些示例中,多个服务器可以被配置成:响应于对新查询的过滤器暗示先前接收的查询的过滤器的确定,提供对数据库的物化视图的访问以用于对新查询的执行,以及响应于对新查询的过滤器并不暗示先前接收的查询的过滤器的确定,提供对数据库的访问以用于对新查询的执行。
附图说明
图1是图示根据本公开的方面的示例系统的框图。
图2是图示根据本公开的方面的示例例程的流程图。
图3是图示图2的例程的示例子例程的流程图。
图4是图示图2的例程的替代示例子例程的流程图。
具体实施方式
本公开提供一种系统和方法,所述系统和方法能够确定新查询是否暗示先前查询,即使新查询或先前查询中的至少一个包括至少一个NULL值。为了进行该确定,系统将新查询和先前查询中的每一个重写成能够更容易地彼此进行比较的更小片段。这使得包含NULL运算符的每个查询的处理项更容易处理,从而可以进行总体确定。
图1是图示包括用于处理查询的计算环境的示例系统100的框图。系统100可以包括通过网络连接150连接到客户端162、164的一个或多个计算装置101。计算装置可以包括一个或多个处理器110、服务器、碎片、单元等。应理解,系统100可以包括跨越具有任意数量的数据中心的分布式网络的任意数量的计算装置101,一个数据中心中的计算装置的数量可能不同于另一数据中心中的计算装置的数据,并且给定数据中心中的计算装置的数量可能随着时间而变,例如,当硬件被移除时,更换、升级或扩展时。计算装置101可以通过网络150通信地耦合到彼此。因此,例如,客户端可以在“云”中执行操作。这些操作可以包括上传、访问或处理数据。数据访问和处理可以包括查询数据库以返回数据库中包括的数据的部分。
所述一个或多个计算装置101的处理器110可以包括众所周知的处理器或其他鲜为人知的类型的处理器。可替代地,处理器130能够是诸如ASIC的专用控制器。
存储器120、所述一个或多个计算装置101中的一个可以包括能够存储处理器110可访问的信息的非暂时性计算机可读介质的类型,诸如硬盘驱动器、固态驱动器、磁带驱动器、光存储、存储卡、ROM、RAM、DVD、CD-ROM、可写存储器和只读存储器。计算装置101可以实施多个架构和技术中的任何一个,包括但不限于直接附加存储(DAS)、网络附加存储(NAS)、存储区域网络(SAN)、光纤通道(FC)、以太网光纤通道(FCoE)、混合架构网络等。除了存储装置之外,数据中心还可以包括多个其他装置,诸如布线、路由器等。
存储器120能够存储可由所述一个或多个处理器110访问的信息,包括在处理器110处接收或由处理器110生成的数据130以及能够由所述一个或多个处理器110执行的指令140。数据130能够由处理器110根据指令140检索、存储或修改。例如,尽管系统和方法不受特定数据结构的限制,但是数据130能够作为具有多个不同字段和记录或文档或缓存的结构被存储在计算机寄存器、数据存储区中。数据130还能够以诸如但不限于二进制值、ASCII或Unicode的计算机可读格式来被格式化。此外,数据130能够包括足以识别相关信息的信息,诸如数字、描述性文本、专有代码、指针、对存储在包括其他网络位置的其他存储器)中的数据的引用,或由函数用于计算相关数据的信息。指令160能够是由处理器110直接执行的指令集,诸如机器代码,或间接执行的指令集,诸如脚本。在这方面,术语“指令”、“步骤”和“程序”在本文中能够互换使用。指令140能够以目标代码格式存储以供处理器110直接处理,或者以包括按需解释或预先编译的独立源代码模块的脚本或集合的其他类型的计算机语言存储。
数据130可以包括存储一个或多个数据集的数据的数据库132。客户端162、164可以通过查询访问数据库132中的数据。访问数据可以涉及请求存储数据的至少一部分、请求对数据的至少一部分执行处理或它们的某一组合。请求可以由客户端162、164以查询的形式提供,其中查询指定客户端希望访问的数据的一个或多个参数、要对数据执行的一个或者多个操作或者两者。数据130可以进一步包括可以临时地或永久地存储的先前接收的查询134。数据可以进一步包括数据库中的数据的物化视图136。物化视图可以响应于用户查询而被构造。例如,数据库可以包括几列数据,查询可以请求每一列的总和,并且物化视图可以包括列的被处理的总和。进一步例如,查询可以请求给定列中的值超过指定阈值的所有数据行,并且物化视图可以包括数据的子集,所述数据的子集仅包含满足查询参数的行。像这样,对于存储在存储器120中的给定数据库132,对存储在存储器中的所述数据库的每个查询134可以对应于存储在存储器中的物化视图136。
指令140可以包括用于指示处理器110根据本文所描述的例程执行操作的各种算法。例如,指令140可以包括用于处理通过网络从客户端接收的查询并且响应于查询将数据从数据库132返回到客户端的查询处理例程142。进一步例如,指令140可以包括用于确定先前存储的查询结果是否满足新接收的查询的查询重写检查例程144。使用先前存储的查询结果处理新接收的查询能够减少计算系统的处理时间和开销,从而减少处理查询的时间和使用成本。
如在本文中更详细地论述,本公开的查询重写检查例程144能够检查不限于定义值的查询,并且特别是包括NULL值的查询,诸如SQL查询。关于图2到4的流程图更详细地描述这些例程。应理解,本文所描述的例程仅为示例,并且在其他示例中,可以添加、减去、替换或重新排序某些步骤。
尽管图1在功能上将处理器110和存储器120中的每一个图示为单个框,但是处理器110和存储器120实际上可以包括可以或可以不被存储在同一物理外壳内的多个处理器和存储器。例如,被存储在存储器中的数据130和指令140中的一些能够被存储在可移动CD-ROM上,而其他能够被存储在只读计算机芯片内。所述指令和数据中的一些或全部能够被存储在物理上远离处理器110,但仍可由处理器110访问的位置中。
图2是图示用于处理新查询的示例例程200的流程图。例程可以由诸如图1中所示的处理器110的一个或多个处理器执行。
在框210处,接收对存储的数据集的新查询Q。新查询Q可以包括用于处理存储的数据集的数据的项Q1、…、QN的连接。本文中使用的术语“连接”不限于AND运算符。可以使用AND运算符、OR运算符或其他运算符的任意组合来连接项。这样的格式的查询也称为包括多个连接项的查询。此外,项可以包括一个或多个NULL值以指示未定义的值。新查询Q可以用作过滤器,由此使用查询处理数据集可以返回数据集的过滤视图。
在框220处,数据集的先前存储的物化视图被访问。物化视图可以是从先前接收的查询V创建的数据集的先前过滤版本。与新查询Q一样,先前接收的查询V可以包括项V1、…、VN的连接,尽管因为查询本身可以不同,新查询Q和先前查询V的项可以不同。同样与新查询Q一样,先前查询V的项可以使用AND运算符、OR运算符或其他运算符的任何组合连接并且可以包括一个或多个NULL值。
在框230处,为了确定由先前查询V产生的物化视图是否足够完整以处理新查询Q,新查询Q的过滤器是否暗示先前查询V的过滤器被确定。这可以通过比较两个查询来实现。换句话说,该比较可以确认对于其中Q评估为真的任何情况,然后V也将必须评估为真,从而使V成为替换Q的合适查询。
查询Q和V可以各自包括几个项,由此对查询的比较能够是困难的。因此,为了便于比较,查询Q和V可以首先被分解为更小的分量,并且然后可以将那些分量相互比较。例如,查询能够被分解为简化的子句,诸如AND子句(由AND运算符组合的一组项)或OR子句(由OR运算符组合的一组项)。进一步例如,子句能够进一步被分解为几个项,这些项可以是由AND运算符分离的AND子句的单独分量,或由OR运算法分离的OR子句的单独分量。将较大过滤器分解为这些较简单的子句和较小的项允许更快且更高效的处理,因为将单独项相互比较比将较大过滤器进行比较简单得多。
如果在框230处确定新查询Q的过滤器暗示先前查询V的过滤器,则操作可以在框240处继续,其中使用已经由先前查询V过滤的数据集的物化视图执行新查询。这避免为了响应新查询Q而处理整个数据集的需要,这反过来能够引起查询处理时间和处理成本的显著减少。
相反,如果在框230处确定新查询Q的过滤器并不暗示先前查询V的过滤器,则操作可以在框250处继续,其中使用数据集的未过滤视图执行新查询。由于先前查询的物化视图被确定为不返回或处理由新查询调用的所有数据,因此系统确定无法将物化视图用作快捷方式。然而,在处理新查询之后,可以保存新查询以及由新查询创建的相关联的物化视图,以用于未来参考并且用于处理未来查询。
图2的示例通常描述一个新查询与一个先前查询之间的比较。然而,应认识到,存储器可以存储多个先前查询,多个先前查询可以与不同物化视图相关联,并且任何新查询能够与任何数量或所有的先前查询相比较,以确定物化视图中的任何一个是否满足新查询。在一些实例中,多个存储的视图可以满足新查询,由此可以实施用于选择例如最小视图的最佳视图的选择算法。
图3是图示用于确定新查询Q的过滤器是否暗示先前查询V的过滤器的示例子例程300的流程图。
在框310处,新查询以析取范式(DNF)重写,也称为“AND中的OR”或“OR子句”。DNF表达式包括由“OR”运算符连接的多个项,而OR子句本身可以包括使用“OR”运算符连接的一个或多个项。例如,“x=6OR(x>3AND y>8)OR(NOT(x=0)AND(y IS NULL))”以DNF形式编写,并且它包括三个项,其中第一个是x=6,第二个是x>3AND y>8,并且第三个是NOT(x=0)AND(yIS NULL)。应注意,如果项中的至少有一个被确定为真,则整个查询为真。另外,应注意,以DNF形式编写的查询可以包括NULL值,诸如“y IS NULL”。
在框320处,先前查询以合取范式(CNF)重写,也称为“AND或OR”或“AND子句”。CNF表达式包括由“AND”运算符连接的多个项,而AND子句本身可以包括使用“AND”运算符组合的一个或多个项。例如,“(x>5OR y>10)AND((NOT(x IS NULL))OR y>20)”以CNF形式编写,并且它包括两个项,其中第一个是x>5OR y>10并且第二个是NOT(x IS NULL)OR y>20。应注意,只有当所有项都被确定为真时,整个查询才为真。另外,应注意,以CNF形式编写的查询可以包括NULL值,诸如“y IS NOT NULL”。
一旦在框330处已经将新查询和先前查询分别重写为DNF和CNF形式,则将重写的新查询的每个项与重写的先前接收的查询进行比较,以确定新查询的每个项是否暗示先前接收的查询的每个项。这可以涉及将两个查询逐项相互比较。例如,可以选择DNF表达式的项和CNF表达式的项,并且可以确定所选择的DNF项是否暗示所选择的CNF项。可以迭代地选择来自CNF和DNF子句的项,直到已比较所有项。
比较各个项以确定含义可以涉及一个或多个逻辑规则。这些规则通常在数学逻辑领域是众所周知的。例如,常数和变量可以使用运算符=、!=、<、<=、>,或>=中的任何一个比较。类似地,可以根据基本算术规则比较组合的常数和变量,诸如认识到x>A暗示x>=A+1,并且x<=A暗示x<A+1。另外,限制在值的范围的变量可以被确定为不是NULL。以下示例说明可能适用于一些示例项的几个逻辑规则:
x=4暗示x>=3。
x<7暗示x<=7。
x<7暗示x<=6(对于离散类型)。
x<8暗示x IS NOT NULL。
x<7AND x>1暗示x<8AND x>0。
出于说明的目的,使用将DNF项x=6OR(x>3AND y>8)OR(NOT(x=0)AND(y ISNULL))与CNF项“(x>5OR y>10)AND((NOT(x IS NULL))OR y>20)”比较的先前示例。
首先,可以选择第一DNF项x=6和第一CNF项(x>5OR y>10)。第一DNF项仅包括一个表达式x=6。第一CNF项通过表达式x>5或y>10满足。由于6是大于5的值,因此可以对x=6暗示x>5进行确定,因此DNF项暗示CNF项。
接下来,可以选择第一DNF项x=6和第二CNF项((NOT(x IS NULL))OR y>20)。由于x=6,因此其值不为NULL,并且第一DNF项也被确定为暗示第二CNF项。
接下来,可以选择第二DNF项x>3AND y>8和第一CNF项(x>5OR(y IS NOT NULL))。由于y在第二DNF项中不是NULL值(它必须大于8),因此第二DNF项也被确定为暗示第一CNF项。
接下来,可以选择第二DNF项x>3AND y>8和第二CNF项((NOT(x IS NULL))OR y>20)。由于x在第二DNF项中不是NULL值(它必须大于3),因此第二DNF项也被确定为暗示第二CNF项。
接下来,可以选择第三DNF项NOT(x=0)AND(y IS NULL)和第一CNF项(x>5OR(y ISNOT NULL))。对于该比较,DNF项并不暗示CNF项,因为存在DNF项返回假,但CNF项返回真的情况(x,y),诸如y不是NULL的任何情况(x,y)。因此,在此示例中,新查询和先前查询的比较可以确定新查询并不暗示先前查询,并且操作可以在框250处继续。
在替代示例中,新查询仅包括:“x=6OR(x>3AND y>8)”并且不陈述:“OR(NOT(x=0)AND(y IS NULL))”,则框330处的比较可能不同。在该情况下,由于新查询的每个DNF项将已被确定为暗示先前查询的每个CNF项,因此新查询和先前查询的比较可以确定新查询的过滤器确实暗示先前查询的过滤器,并且操作可以在框240处继续。
图4是图示用于确定新查询Q的过滤器是否暗示先前查询V的过滤器的替代示例子例程400的流程图。
在框410处,将新查询和先前查询重写为谓词,所述谓词将新查询确立为真并且将先前查询确立为假或NULL。谓词可以指示是否存在新查询评估为真,而先前查询评估为假的任何情况,这又会指示新查询的过滤器是否无法暗示先前查询的过滤器。在这方面,谓词可以被表达为“Q AND((NOT V)OR(V IS NULL))。
在框420处,谓词以DNF重写,由此多个项由OR运算符分隔。以DNF重写谓词允许独立地评估DNF子句的每个项。
在框430处,DNF子句的每个项是否与自身不兼容被确定,其意味着项含有不兼容性或矛盾。不兼容性和矛盾通常出现在项包含的两个表达式之间。DNF谓词的每个项由OR运算符分隔,但可能包含与AND运算符连接的多个表达式。像这样,如果两个表达式与AND运算符连接,但彼此不兼容(诸如“x<1”且“x>2”,或诸如“y是NULL”且“y=5”),则可以确定该项与自身不兼容或自相矛盾。换句话说,不存在会让AND表达式评估为真的x的值或者更一般的变量赋值。术语“与自身不兼容”和“自相矛盾”在本文中可以互换使用。因为DNF谓词仅是对原始谓词的重写,所以包含不兼容性或自相矛盾的每个DNF项意味着原始谓词作为整体本身包含该不兼容性和自相矛盾。因此,谓词表明Q评估为真,而V评估为假或NULL会是不一致或自相矛盾的。此外,如果每个DNF项与自身不兼容,则这将指示对于评估为真的每个Q,V也将必须评估为真。因此,Q暗示V。相反,如果没有发现任何DNF项与自身不兼容,则无法证明对于评估为真的每个Q,V也将必然评估为真。因此,Q并不暗示V,并且无法依赖于由V生成的物化数据集来执行Q。
例如,如果新查询是“x>1OR(y IS NULL))”并且先前查询是“x>0OR(y IS NOTNULL)”,则可以将这些查询重写为谓词。
1)(x>1OR(y IS NULL))AND(NOT(x>0OR(y IS NOT NULL))OR(x>0OR(y IS NOTNULL)IS NULL)),
为了在框430处完成评估,可以使用各种操作简化谓词。在框420处以DNF重写谓词之前,可以执行至少一些简化。例如,用于简化谓词的第一操作可以涉及简化谓词的“V ISNULL”部分。以下示例说明可能仅适用于简化包含NULL的某一示例表达式的几个逻辑规则:
NULL is NULL→TRUE
7is NULL→FALSE
x is NULL→(无法被简化)
(x<y)is NULL→(X is NULL)OR(Y is NULL)
(NOT x)is NULL→P is NULL
(x is NULL)is NULL→FALSE
(x1 AND x2 AND…AND xN)is NULL→((x1 OR(x1 is NULL))AND(x2 OR(x2 isNULL))AND…AND(xN OR(xN is NULL))AND((x1 is NULL)OR(x2 is NULL)OR…OR(xN isNULL))
(x1 OR x2 OR…OR xN)is NULL→((NOT x1)OR(x1 is NULL))AND((NOT x2)OR(x2 is NULL))AND…AND((NOT xN)OR(xN is NULL))AND((x1 is NULL)OR(x2 is NULL)OR…OR(xN is NULL))
以上述示例“(x>0OR(y IS NOT NULL))IS NULL”为例,由于很明显x>0与x ISNULL不兼容,而且进一步y IS NOT NULL与y IS NULL不兼容,所以此陈述能够被简化为“FALSE”。因此,可以将谓词简化为:
2)(x>1OR(y IS NULL))AND(NOT(x>0OR(y IS NOT NULL))OR(FALSE))
用于简化谓词的另一操作可以涉及简化谓词的“NOT B”部分,在该情况下为“NOT(x>0OR(y IS NOT NULL))”。这与“x≤0AND(y IS NULL)”相同,使得整个谓词重写为:
3)((x>1)OR(y IS NULL))AND(((x≤0)AND(y IS NULL))OR(FALSE))
为了清楚起见,在以DNF重写之前,下文重写谓词,其中“a”用于表示x>1,“b”用于表示(y IS NULL),并且“c”用于表示x≤0:
4)(a OR b)AND((c AND b)OR(FALSE))
能够从上述示例中看到,简化谓词能够使谓词更容易地以DNF重写,如在框420处执行。在此特定示例中,示例谓词的DNF是由OR运算符分隔的四个项的集合。
5)[a AND b AND c]OR[a AND FALSE]OR[b AND c]OR[b AND FALSE]
最后,如在框430处执行,可以评估谓词的不兼容性。从序列中的第一项开始并且在最后一项结束,可以交互地评估不兼容性。评估操作至少可以继续,直到找到与自身兼容的一个项。如果发生该情况,则操作可以在框250处继续,因为先前查询V的物化视图将已经被确定为不适合于新查询Q。然而,如果每个项被确定为与自身不兼容,则操作可以在框240处继续,其中使用查询V的物化视图评估新查询Q。
以上述示例谓词为例,以DNF重写的谓词的第二项和第四项显然不兼容,因为它们已经被简化为“FALSE”。第一项包括要求x>1的一个表达式“a”和要求x≤0的另一表达式“c”。这些要求相互矛盾,因此可以确定第一项也不兼容。
然而,DNF谓词的每个项都必须与自身不兼容,以便确定新查询的过滤器是否暗示先前查询的过滤器。在本示例中,第三项包括要求y IS NULL的一个表达式“b”和另一表达式x>0,但是这些项彼此兼容。因此,能够看出对于一些变量集x、y,至少谓词的该子句被满足,意味着新查询将返回“TRUE”,而先前查询将返回“FALSE”或“NULL”。这指示新查询的过滤器并不暗示先前查询的过滤器,并且因此无法使用从先前查询导出的物化视图来处理新查询。替代的是,使用数据集的标准视图执行新查询可以被确定。
例程200可以包括用于在子例程300、400之间选择的指令。选择可以基于Q和V,由此对于更简单或更短的查询,一个子例程可以是优选的,而对于更复杂或更长的查询,另一子例程可以是优选的。例如,如果确定以DNF重写新查询或谓词对于一个子例程比另一个子例程长,则可以选择导致更短DNF重写的子例程。在其他实例中,可以选择一个子例程作为默认值,除非遇到错误,诸如存在子例程不支持的表达式或表达式集合。
为了简化评估过程,可以将附加步骤添加到例程200和子例程300、400。一个示例附加步骤可以包括在分别以DNF和CNF重写新查询和先前查询或将新查询和先前查询重写为谓词之前,重写查询以共享一组共同变量。例如,如果能够将变量w重写为不同变量x,则此步骤可以涉及将w重写为x。例如,如果新查询包含对在先前查询中不受约束的变量w的约束,则在新查询中对w的约束可能会从新查询的评估中被排除,因为可以假设先前查询包含数据集中与w有关的所有数据。此步骤可以减少要在查询中评估的变量总数。
另一示例附加步骤可以包括在分别以DNF和CNF重写新查询和先前查询或将新查询和先前查询重写为谓词之前,移除结构上等效的新查询和先前查询。逻辑上等效但以不同方式编写的项,诸如第一项“x>5AND y>6”和第二项“NOT(x≤5OR y≤6),不被该步骤移除。该方法能够减少评估中的项的总数。
进一步的示例附加步骤可以包括在移除结构上等效的项之后,确定剩余项中的任何一个是否指代不是分组操作的键的列。如果剩余项中的任何一个指代不是分组键的列,则能够抢先确定不使用过滤视图。相反,如果没有任何剩余项指代不是分组键的列,则操作可以继续分别以DNF和CNF重写新查询和先前查询或将新查询和先前查询重写为谓词。
以上示例方法提供用于评估SQL查询并且将SQL查询与先前查询和由那些查询生成的过滤视图相比较的方式。像这样,可以确定是否可以使用查询数据库的先前存储的和索引的视图来处理新查询。这反过来能够引起改进的计算机操作和功能,包括但不限于更快的处理时间和SQL查询处理的减少开销。
尽管已经参考特定实施例描述本文中的技术,但是应当理解,这些实施例仅说明本技术的原理和应用。因此,应当理解,可以对说明性实施例进行许多修改并且可以设计其他布置,而不脱离由所附权利要求限定的本技术的精神和范围。
大多数前述替代示例不是互相排斥的,而是可以以各种组合实施以实现独特的优点。由于能够利用以上讨论的特征的这些以及其他变型和组合,而不脱离权利要求书所限定的主题,因此对实施例的前述描述应通过说明而不是通过限制权利要求书所限定的主题进行。例如,前面的操作不必按照上面描述的精确次序执行。相反,各种步骤能够按不同的顺序处理,诸如颠倒或同时处理。除非另有说明,否则步骤也能够被省略。另外,提供本文描述的示例以及用短语表达为“例如”、“包括”等的子句不应被解释为将权利要求的主题限制于特定示例;相反,示例旨在说明许多可能实施例中的仅一个。此外,不同附图中的相同附图标记能够标识相同或相似的元件。
Claims (21)
1.一种方法,包括:
由一个或多个处理器接收包括第一多个连接项的新查询;
由所述一个或多个处理器从存储器访问数据库的过滤视图,其中根据由第二多个连接项表示的过滤器,所述过滤视图由先前接收的查询过滤,其中所述第一多个连接项或所述第二多个连接项中的至少一个包括至少一个NULL值;
确定所述新查询的所述过滤器暗示所述先前接收的查询的过滤器;以及
基于对新查询的所述过滤器暗示所述先前接收的查询的所述过滤器的所述确定,使用所述先前接收的查询的所述过滤视图执行所述新查询。
2.根据权利要求1所述的方法,其中,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器包括:
重写所述新查询和所述先前接收的查询以共享一组共同变量;
以析取范式重写所述新查询;
以合取范式重写所述先前接收的查询;以及
确定所重写的新查询的每个项暗示所重写的先前接收的查询的每个项,其中对所述新查询暗示所述先前接收的查询的所述确定是基于所重写的新查询的每个项暗示所重写的先前接收的查询的每个项。
3.根据权利要求2所述的方法,其中,所述先前接收的查询或所述新查询包括分组操作,并且其中,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器包括:在以析取范式重写所述新查询并且以合取范式重写所述先前接收的查询之前,移除所述先前接收的查询或所述新查询中指代不是所述分组操作的键的列的项。
4.根据权利要求2所述的方法,其中,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器包括:在以析取范式重写所述新查询并且以合取范式重写所述先前接收的查询之前,移除所述先前接收的查询和所述新查询中结构上等效的项。
5.根据权利要求4所述的方法,进一步包括:在移除所述先前接收的查询和所述新查询中结构上等效的所述项之后,部分地基于没有任何剩余项指代不是分组键的列,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器。
6.根据权利要求1所述的方法,其中,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器包括:
将所述新查询和所述先前接收的查询重写为谓词,所述谓词将所述新查询确立为真并且将所述先前接收的查询确立为假或NULL;
以析取范式重写所述谓词;以及
确定所重写的谓词的每个项与自身不兼容,其中,对所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器的所述确定是基于所重写的谓词的每个项与自身不兼容。
7.根据权利要求6所述的方法,其中,所述方法进一步包括:在以析取范式重写所述谓词之前,对将所述先前接收的查询表示为NULL的所述谓词的至少一部分进行简化。
8.根据权利要求1所述的方法,进一步包括:
由一个或多个处理器接收包括第三多个连接项的第二新查询;
由所述一个或多个处理器从存储器访问所述先前接收的查询的所述过滤视图,其中,所述第二多个连接项或所述第三多个连接项中的至少一个包括至少一个NULL值;
由所述一个或多个处理器确定所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器;以及
响应于对所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器的所述确定,对所述数据库执行所述第二新查询。
9.根据权利要求8所述的方法,其中,确定所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器包括:
将所述第二新查询和所述先前接收的查询重写为谓词,所述谓词将所述第二新查询确立为真并且将所述先前接收的查询确立为假或NULL;
以析取范式重写所述谓词;以及
确定所重写的谓词的至少一个项不与自身不兼容,其中对所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器的所述确定是基于所重写的谓词的所述至少一个项不与自身不兼容。
10.根据权利要求8所述的方法,其中,确定所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器包括:
重写所述第二新查询和所述先前接收的查询以共享一组共同变量;
以析取范式重写所述第二新查询;
以合取范式重写所述先前接收的查询;以及
确定所重写的第二新查询的至少一个项不暗示所重写的先前接收的查询的至少一个项,其中对所述新查询不暗示所述先前接收的查询的所述确定是基于所重写的第二新查询的至少一个项不暗示所重写的先前接收的查询的至少一个项。
11.一种系统,包括:
用于存储指令的存储器;以及
一个或多个处理器,所述一个或多个处理器耦合到所述存储器并且被配置成执行所存储的指令以:
接收包括第一多个连接项的新查询;
从所述存储器访问由先前接收的查询根据过滤器过滤的数据库的过滤视图,其中所述过滤视图由第二多个连接项表示,并且其中所述第一多个连接项或所述第二多个连接项中的至少一个包括至少一个NULL值;
确定所述新查询的过滤器暗示所述先前接收的查询的过滤器;以及
基于对所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器的所述确定,使用所述数据库的所述过滤视图执行所述新查询。
12.根据权利要求11所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令以:
重写所述新查询和所述先前接收的查询以共享一组共同变量;
以析取范式重写所述新查询;
以合取范式重写所述先前接收的查询;以及
确定所重写的新查询的每个项暗示所重写的先前接收的查询的每个项,其中对所述新查询暗示所述先前接收的查询的所述确定是基于所重写的新查询的每个项暗示所重写的先前接收的查询的每个项。
13.根据权利要求12所述的系统,其中,所述先前接收的查询或所述新查询包括分组操作,并且其中,确定所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器包括:在以析取范式重写所述新查询并且以合取范式重写所述先前接收的查询之前,移除所述先前接收的查询或所述新查询中指代不是所述分组操作的键的列的项。
14.根据权利要求12所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令,以在以析取范式重写所述新查询并且以合取范式重写所述先前接收的查询之前,移除所述先前接收的查询和所述新查询中结构上等效的项。
15.根据权利要求11所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令以:
将所述新查询和所述先前接收的查询重写为谓词,所述谓词将所述新查询确立为真并且将所述先前接收的查询确立为假或NULL;
以析取范式重写所述谓词;以及
确定所重写的谓词的每个项与自身不兼容,其中对所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器的所述确定是基于所重写的谓词的每个项与自身不兼容。
16.根据权利要求15所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令以在以析取范式重写所述谓词之前,对将所述先前接收的查询表示为NULL的所述谓词的至少一部分进行简化。
17.根据权利要求11所述的系统,所述一个或多个处理器被配置成执行所存储的指令以:
由一个或多个处理器接收包括第三多个连接项的第二新查询;
由所述一个或多个处理器从存储器访问所述先前接收的查询的所述过滤视图,其中所述第二多个连接项或所述第三多个连接项中的至少一个包括至少一个NULL值;
由所述一个或多个处理器确定所述第二新查询不暗示所述先前接收的查询;以及
响应于对所述新查询不暗示所述先前接收的查询的所述确定,对所述数据库执行所述新查询。
18.根据权利要求17所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令以:
将所述第二新查询和所述先前接收的查询重写为谓词,所述谓词将所述第二新查询确立为真并且将所述先前接收的查询确立为假或NULL;
以析取范式重写所述谓词;以及
确定所重写的谓词的至少一个项不与自身不兼容,其中对所述第二新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器的所述确定是基于所重写的谓词的所述至少一个项不与自身不兼容。
19.根据权利要求17所述的系统,其中,所述一个或多个处理器被配置成执行所存储的指令以:
重写所述第二新查询和所述先前接收的查询以共享一组共同变量;
以析取范式重写所述第二新查询;
以合取范式重写所述先前接收的查询;以及
确定所重写的第二新查询的至少一个项不暗示所重写的先前接收的查询的至少一个项,其中对所述新查询不暗示所述先前接收的查询的所述确定是基于所重写的第二新查询的至少一个项不暗示所重写的先前接收的查询的至少一个项。
20.一种数据中心,包括:
多个服务器,用于存储数据库和所述数据库的至少一个物化视图,其中所述物化视图由先前接收的查询根据过滤器过滤;以及
根据权利要求11所述的系统。
21.根据权利要求20所述的数据中心,其中,所述多个服务器被配置成:响应于对所述新查询的所述过滤器暗示所述先前接收的查询的所述过滤器的所述确定,提供对所述数据库的所述物化视图的访问以用于执行所述新查询,以及响应于对所述新查询的所述过滤器不暗示所述先前接收的查询的所述过滤器的确定,提供对所述数据库的访问以用于执行所述新查询。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063073746P | 2020-09-02 | 2020-09-02 | |
US63/073,746 | 2020-09-02 | ||
US17/392,728 US11625396B2 (en) | 2020-09-02 | 2021-08-03 | SQL implication decider for materialized view selection |
US17/392,728 | 2021-08-03 | ||
PCT/US2021/048409 WO2022051266A1 (en) | 2020-09-02 | 2021-08-31 | Sql implication decider for materialized view selection |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115485675A true CN115485675A (zh) | 2022-12-16 |
Family
ID=80356675
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180029784.9A Pending CN115485675A (zh) | 2020-09-02 | 2021-08-31 | 用于物化视图选择的sql含义决策器 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11625396B2 (zh) |
EP (1) | EP4208800A1 (zh) |
CN (1) | CN115485675A (zh) |
WO (1) | WO2022051266A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230289341A1 (en) * | 2022-03-14 | 2023-09-14 | Workday, Inc. | Computerized systems and methods for materialized view matching |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6449606B1 (en) * | 1998-12-28 | 2002-09-10 | Oracle Corporation | Using a materialized view to process a related query containing an antijoin |
US6748392B1 (en) * | 2001-03-06 | 2004-06-08 | Microsoft Corporation | System and method for segmented evaluation of database queries |
US8868544B2 (en) * | 2002-04-26 | 2014-10-21 | Oracle International Corporation | Using relational structures to create and support a cube within a relational database system |
US7406468B2 (en) * | 2005-06-14 | 2008-07-29 | Microsoft Corporation | View matching for materialized outer-join views |
US8560523B2 (en) | 2008-06-26 | 2013-10-15 | Microsoft Corporation | View matching of materialized XML views |
US8620899B2 (en) * | 2010-02-09 | 2013-12-31 | International Business Machines Corporation | Generating materialized query table candidates |
US9639575B2 (en) * | 2012-03-30 | 2017-05-02 | Khalifa University Of Science, Technology And Research | Method and system for processing data queries |
US9519662B2 (en) * | 2013-09-10 | 2016-12-13 | International Business Machines Corporation | Boolean term conversion for null-tolerant disjunctive predicates |
-
2021
- 2021-08-03 US US17/392,728 patent/US11625396B2/en active Active
- 2021-08-31 WO PCT/US2021/048409 patent/WO2022051266A1/en unknown
- 2021-08-31 EP EP21790633.8A patent/EP4208800A1/en active Pending
- 2021-08-31 CN CN202180029784.9A patent/CN115485675A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022051266A1 (en) | 2022-03-10 |
US11625396B2 (en) | 2023-04-11 |
EP4208800A1 (en) | 2023-07-12 |
US20220067043A1 (en) | 2022-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8745033B2 (en) | Database query optimization using index carryover to subset an index | |
US9916368B2 (en) | Non-exclusionary search within in-memory databases | |
US20110225205A1 (en) | Multi-query optimization | |
US6598038B1 (en) | Workload reduction mechanism for index tuning | |
US20150278268A1 (en) | Data encoding and corresponding data structure | |
US20070276825A1 (en) | Query reuse through recommend parameter flexibility | |
CA2480688A1 (en) | Method and apparatus for querying relational databases | |
CA2556979A1 (en) | Ultra-shared-nothing parallel database | |
US11797483B2 (en) | Data pruning based on metadata | |
US6697794B1 (en) | Providing database system native operations for user defined data types | |
EP1484691B1 (en) | Method and computer system for optimization of a Boolean expression used for queries | |
US20240126752A1 (en) | Joining javascript object notation (json) queries across cloud resources | |
US7213014B2 (en) | Apparatus and method for using a predefined database operation as a data source for a different database operation | |
CN108073641B (zh) | 查询数据表的方法和装置 | |
CN115485675A (zh) | 用于物化视图选择的sql含义决策器 | |
US20030046272A1 (en) | Database systems, methods and computer program products using type based selective foreign key association to represent multiple but exclusive relationships in relational databases | |
US20100082600A1 (en) | System, method, and computer-readable medium for optimizing the performance of outer joins | |
US8838573B2 (en) | Autonomic index creation | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
US11163766B2 (en) | Unique key lookup with additional filter | |
US20060085464A1 (en) | Method and system for providing referential integrity constraints | |
WO2015191032A1 (en) | Aggregate projection | |
US10810199B2 (en) | Correlation of input and output parameters for a function in a database management system | |
US20210149897A1 (en) | Method and apparatus for processing query using n-ary join operators | |
CN116776366A (zh) | 用户权限控制方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |