CN1492361A - 嵌入式数据库查询的处理方法 - Google Patents

嵌入式数据库查询的处理方法 Download PDF

Info

Publication number
CN1492361A
CN1492361A CNA021459576A CN02145957A CN1492361A CN 1492361 A CN1492361 A CN 1492361A CN A021459576 A CNA021459576 A CN A021459576A CN 02145957 A CN02145957 A CN 02145957A CN 1492361 A CN1492361 A CN 1492361A
Authority
CN
China
Prior art keywords
node
inquiry
tree
subtree
formation
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.)
Granted
Application number
CNA021459576A
Other languages
English (en)
Other versions
CN100399324C (zh
Inventor
杨柏梁
丁刚
孙雅莎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Lenovo Beijing Ltd
Original Assignee
Lenovo Beijing Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Lenovo Beijing Ltd filed Critical Lenovo Beijing Ltd
Priority to CNB021459576A priority Critical patent/CN100399324C/zh
Publication of CN1492361A publication Critical patent/CN1492361A/zh
Application granted granted Critical
Publication of CN100399324C publication Critical patent/CN100399324C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及数据库管理系统领域,公开了一种嵌入式数据库查询的处理方法,该方法包括以下步骤:判断查询条件中是否含有合并操作逻辑运算符,如果没有,判断该查询为单表查询还是多表查询,如果是单表查询,则按优化规则生成查询计划树,如果是多表查询,则先把查询条件中的单表查询条件和连接查询条件分开,然后一连接操作队列,最后依次取出连接操作队列中的表,依次生成所取表的单表查询计划子树,把当前子树节点和上一子树节点形成一个连接操作节点,否则按最后处理合并操作的规则产生查询计划树。本发明不必对各个操作进行复杂的代价估算,节约了执行各个操作的时间,提高了嵌入式数据库的查询效率。

Description

嵌入式数据库查询的处理方法
技术领域
本发明涉及数据库管理系统,尤其涉及嵌入式数据库查询的处理方法。
背景技术
数据库系统是管理信息系统的核心,从大多数系统的应用实例来看,查询操作在各种数据库操作中所占据的比重最大。数据库管理系统中对数据库查询操作性能影响最大的是查询处理器,查询处理器负责把用户的查询进行分解、优化,并且执行之,产生用户需要的查询结果,是数据库管理系统中最重要的组成部分之一。
数据库管理系统的查询处理器由三部分功能组成:查询分析器、查询优化器和执行引擎。查询分析器负责对文本形式的查询进行分析并转化为用户所提交的SQL语句的集合,即转化为查询计划。查询优化器负责把查询计划转化为对于实际数据最有效的操作序列,数据库管理系统处理查询计划的过程是这样的:在做完查询语句的词法、语法检查之后,将语句提交给数据库管理系统的查询优化器,查询优化器首先要对各个操作进行复杂的代价估计,完成代数优化和存取路径的优化;然后对各种查询计划方案进行启发式选择,由预编译模块对语句进行处理并生成优化的查询计划,该优化的查询计划是经过优化处理之后所产生的语句集合;最后选出一个最高效的查询计划,在合适的时间提交给系统处理执行,将执行结果返回给用户。执行引擎负责按照查询规划的操作序列顺序调度每一个操作以完成相应的功能,产生最后用户需要的查询结果。
在传统的数据库产品(如Oracle、Sybase等)的高版本中都是采用基于代价的优化方法,通过启发式等方法对整个查询进行代价估计,估算查询中各个代数操作的代价,得出一个最优化的查询处理策略,并以I/O操作作为一个优化的主要依据。
但对于嵌入式数据库来说,由于嵌入式数据库通常处理数据量较少,一般在内存进行数据处理,涉及的I/O操作较少,因此传统查询的处理方法在嵌入式数据库上必将带来低效的性能,不适合以小巧和灵活为特色的嵌入式数据库。
发明内容
本发明的目的在于提供一种嵌入式数据库查询的处理方法,以在嵌入式数据库中实现简洁、有效的查询处理,提高嵌入式数据库查询效率。
本发明通过以下具体技术方案实现:
一种嵌入式数据库查询的处理方法,该方法至少包括以下步骤:
A)判断查询条件中是否含有合并操作逻辑运算符,如果没有,则
判断该查询为单表查询还是多表查询,如果是单表查询,则判断被投影的各域是否出现在选择条件中,如果是,则先生成投影操作节点,再生成选择操作节点,然后执行步骤B,否则,先生成选择操作节点,再生成投影操作节点,然后执行步骤B,
如果是多表查询,则先把查询条件中的单表查询条件和连接查询条件分开,然后将所有连接查询条件左右两端的表和连接信息建立一连接操作队列,最后依次取出连接操作队列中的表,依次生成所取表的单表查询计划子树,把当前子树节点和上一子树节点形成一个连接操作节点,以此循环直至连接操作队列为空,然后执行步骤B,
如果查询条件中含有合并操作逻辑运算符,则由所述合并操作逻辑运算符分隔的各个条件表达式产生查询计划子树,然后在所述的查询子树中选出两个作为源数据生成合并操作节点,该合并操作节点再和下一个查询计划子树的根节点作为源数据生成合并操作节点,以此循环直至查询条件中合并操作均对应有一合并操作节点,将最后的合并操作节点作为查询计划树根节点,形成查询计划树,然后执行步骤C;
B)判断是否需要排序,如果是,则判断是否需要消除重复记录,如果是则生成消除重复操作的树节点,将该树节点指向上一树节点,再将当前操作节点作为根节点,形成查询计划树,否则生成排序树节点,将该排序树节点指向上一树节点,再将当前操作节点作为根节点,形成查询计划树,如果不需要排序,则将当前操作节点作为根节点,形成查询计划树;
C)后序遍历查询计划树,并且执行每一个树节点上的操作;
D)释放所述查询计划数。
其中,步骤B所述的生成排序树节点、将该排序树节点指向上一树节点步骤可以进一步包括:先初始化排序操作节点,然后将所述排序操作节点的左指针指向上一个节点;所述生成消除重复操作的树节点、将该树节点指向上一树节点的步骤进一步包括先初始化排序操作节点,接着将排序操作节点的左指针指向上一个节点,然后初始化消除重复操作节点,最后将消除重复操作节点的左指针指向上一个节点。
较佳地,步骤A所述的单表查询的步骤可以进一步包括以下步骤:判断查询中是否存在选择条件,如果存在选择条件,则判断查询域的个数是否小于总的域数,如果是,则在被投影的各域出现在选择条件中时,先初始化选择操作节点,再初始化投影操作节点,最后将投影操作节点的左指针指向选择操作节点,在被投影的各域不出现在选择条件中时,先初始化投影操作节点,再初始化选择操作节点,最后将选择操作节点的左指针指向投影操作节点;如果不存在选择条件或者查询域的个数不小于总的域数,则生成选择操作节点并初始化。
较佳地,步骤A所述建立连接操作队列的步骤可以进一步包括:
01)判断连接查询条件个数是否大于0,如果是,则先将第一个连接查询条件的左边的表入队,再将第一个连接查询条件的右边的表和连接信息入队,然后执行步骤02,否则转至步骤03;
02)判断是否还有未处理的连接查询条件,如果是,判断所述未处理的连接查询条件左右两端的表中是否已有一个表在队列中,如果所述未处理的连接查询条件左右两端的表中已有一个表在队列中,则把该连接查询条件的另一个表和连接信息入队,然后返回步骤02,如果所述未处理的连接查询条件左右两端的表中没有任一个表在队列中,则从查询的所有表中顺序取一个不在队列中的表,把连接比较符设为笛卡尔积并入队,然后返回步骤02,如果没有未处理的连接查询条件,则执行步骤03;
03)把其余不在连接条件中且不在队中的表依次加入队列,,再把连接比较符设为笛卡尔积并入队。
较佳地,步骤A所述依次取出连接操作队列中的表、依次生成所取表的单表查询计划子树、把当前子树节点和上一子树节点形成一个连接操作节点的步骤可以进一步包括:
001)判断依次从连接操作队列中取出的一个表上是否有选择和投影操作,如果有,则生成该表上的单表查询计划子树,并将该单表查询计划子树作为左子树,否则转至所述步骤B;
002)判断连接操作队列是否为空,如果是则返回步骤001,否则,从连接操作队列中取出一个表和连接条件,根据单表查询计划树的生成该表的单表查询计划子树,并将该单表查询计划子树作为右子树,然后根据连接条件初始化连接操作节点,再将连接操作节点的左右指针分别指向左右子树,本连接操作节点作为下次连接操作的左子树。
较佳地,所述步骤C可以进一步包括:判断根节点是否不空,如果是则先递归调用后续遍历执行左子树,接着递归调用后续遍历执行右子树,最后执行根节点上的操作,否则结束后续遍历查询计划树。
较佳地,所述步骤D可以进一步包括:判断根节点是否不空,如果是,则先递归调用后续遍历释放左子树,接着递归调用后续遍历释放右子树,最后释放根节点,否则结束释放查询计划树。
较佳地,所述的查询计划树可以采用二叉树的存储结构表示。
较佳地,所述查询计划树节点可以存储有操作编号、选择操作信息指针、投影操作信息指针、连接操作信息指针、排序操作信息指针、合并操作信息指针、消除重复操作信息指针、操作结果信息指针、左子树指针以及右子树指针。
本发明针对传统数据库管理系统中查询的处理方法的不足,根据嵌入式系统特点,并结合嵌入式数据库存储结构和数据操作算法的特点,定制了查询分解优化规则,根据该优化规则和查询信息直接产生效率较高的查询计划树,尤其能够优化产生查询计划二叉树的过程,通过建立连接操作队列,提高了多表查询的处理效率,从而提高了嵌入式数据库系统中的查询处理器对查询的处理效率。相对于以I/O操作为代价和启发式选择查询计划树的传统数据库管理系统查询的处理方法,本发明不必对各个操作进行复杂的代价估算,节约了执行各个操作的时间,更适合以小巧和灵活为特色的嵌入式数据库,对于嵌入式系统数据库的应用和推广起到积极的作用。
附图说明
图1为查询计划二叉树产生的总体流程图;
图2为查询条件中有合并操作的查询计划二叉树生成示意图;
图3为单表查询产生查询计划树的流程图;
图4为多表查询的查询计划树产生方法中第二步所述建立连接操作队列的流程图;
图5为一查询SQL语句建立连接操作队列的示意图;
图6为多表查询的查询计划树产生方法中第三步所述连接操作队列中元素依次出队,形成计划树的流程图;
图7为一查询SQL语句的查询计划二叉树示意图;
图8为后续遍历查询计划树并执行各个树节点上的操作的流程图;
图9为释放查询计划树的流程图。
具体实施方式
为使本发明的目的、技术方案、及优点更加清楚明白,以下参照附图并举实施例,对本发明进一步详细说明。
在嵌入式数据库中,从一条查询SQL语句中共可以分解出六类操作,分别是:选择操作、投影操作、连接操作、排序操作、消除重复操作、合并操作。其中,选择操作也称为过滤操作,是从一个指定的关系表中选出满足一定条件的所有记录。投影操作就是从一个指定关系表中去掉某些域。连接操作指从两个表中各指定一个域,选出在这两个域上满足比较条件的所有记录。排序操作指在某个指定域把所有记录按指定的顺序进行排序。消除重复操作指把一条记录链中的重复记录去掉,保证记录的唯一性。合并操作指把两个结构相同的表单中的所有记录进行合并,形成一条记录链。
嵌入式数据库采用二叉树存储结构来表示查询计划。二叉树节点中主要存储的就是上述六类操作所需要的信息。二叉树的树节点的数据结构如表1所示。其中,Command确定树节点具体需要完成的操作,FilterCond、ProjectCond、JoinCond、SortCond、DistinctCond和UnionCond六个指针分别是六个操作的信息,指针是否为空由Command来决定。例如:某树节点是选择操作节点,则FilterCond指针存储的是选择条件信息的内存地址,其他五个操作指针都为空。SqlResult指针存储的是树节点操作结果信息的内存地址。LsubTree和RsubTree分别指向树节点的左右子树。
Command             操作编号
FilterCond*     选择操作信息指针
ProjectCond*    投影操作信息指针
JoinCond*       连接操作信息指针
SortCond*       排序操作信息指针
DistinctCond*   消除重复操作信息指针
UnionCond*      合并操作信息指针
SqlResult*    操作结果信息指针
LsubTree*     左子树指针
RsubTree*     右子树指针
表1:二叉树的树节点的数据结构
本发明提供的嵌入式数据库查询的处理方法包括以下三步:第一步,根据查询信息和优化规则直接产生优化的查询计划,该查询计划采用上述二叉树的存储结构来表示,也称为查询计划二叉树,树节点的数据结构如上述表1所示;第二步,后序遍历上述查询计划二叉树,并且执行每一个树节点上的操作;第三步,释放上述查询计划二叉树。由于查询计划优化的好坏直接影响数据库查询性能,因此上述步骤中最重要的是第一步。
下面详细说明上述第一步查询计划二叉树的产生以及查询处理的实现方法。
查询计划二叉树形成的主要依据是查询分解优化规则,由这些优化规则决定上述列出的六类操作节点在二叉树中的位置,从而产生一个优化、高效的查询处理方法。
根据数据库的存储结构和各个操作的特点,数据库的查询分解优化规则如下:
规则1,在选择操作、投影操作、连接操作、排序操作、消除重复操作、合并操作六类操作中优先处理投影操作。由于数据库的记录是在内存中以记录链的形式存在的,所以对于投影操作来说,只需要从每条记录链中把被投影掉的域值空间释放掉,而不需要进行记录的查找和比较等操作,本身需要CPU时间少,优先处理可以减少在其操作结果上的其他操作所需的时间。
规则2,在选择操作和投影操作同时存在的情况下,如果被投影的各域不出现在选择条件表达式中,则根据步骤1,优先作投影操作,否则,优先作选择操作。这是由于数据库进行查询时必须满足查询的正确性,不能先投影掉存在于选择条件表达式中的域,否则,选择操作结果的记录个数将可能多于实际的记录个数。
规则3,在选择操作、投影操作和连接操作同时存在的情况下,后处理连接操作。因为连接操作需要双表操作,在数据库中,需要在双表上分别排序,进行记录的循环比较,耗费CPU时间最多,所以最后处理该操作。
规则4,将合并操作最后处理。因为在数据库中,查询处理器处理的查询条件表达式都是析取范式,所以,只有在最后处理合并操作才能保证查询的正确性。
参见图1所示,图1为查询计划二叉树产生的总体流程图,根据上述优化规则,查询计划二叉树是这样产生的:判断查询条件中是否含有“or”逻辑运算符,如果有“or”,则根据优化步骤4,由“or”分隔的各个条件表达式产生查询计划子树,然后在子树中选出两个作为源数据生成合并操作节点,该节点再和下一个子树的根节点作为源数据生成合并操作节点,以此类推,最后产生一个树根节点,该树根节点就是查询计划树的根节点。如图2所示,子树1、子树2、子树3....子树n分别为由“or”分隔的条件表达式产生的查询计划子树,将子树1和子树2作为源数据生成合并操作节点1,合并操作节点1和子树3作为源数据生成合并操作节点2,以此类推,直至查询条件中合并操作均对应有一合并操作节点,将最后产生的合并操作节点n为树根节点。如果查询条件中未含有“or”逻辑运算符,则判断查询为单表查询还是多表查询,如果是单表查询,则根据优化规则1和2产生查询计划树,如果是多表查询,则根据优化规则1、2和3产生查询计划树。
参见图3所示,图3为单表查询产生查询计划树的流程图。其产生查询计划树的步骤如下:
步骤301,判断是否存在选择条件,如果是,则执行步骤302,否则执行步骤310,初始化选择操作节点,再转至步骤304;
步骤302,判断查询域的个数是否小于总的域数,如果是,则执行步骤303,否则执行步骤310,初始化选择操作节点,再转至步骤304;
步骤303,判断被投影的各域是否出现在选择条件中,如果是,则执行步骤311,先初始化选择操作节点,再初始化投影操作节点,最后将投影操作节点的左指针指向选择操作节点,转至步骤304,否则执行步骤312,先初始化投影操作节点,再初始化选择操作节点,最后将选择操作节点的左指针指向投影操作节点,转至步骤304;
步骤304,判断是否需要排序,如果是,则执行步骤305,否则转至步骤306;
步骤305,判断是否需要消除重复记录,如果是,则执行步骤307,先初始化排序操作节点,接着将排序操作节点的左指针指向上一个节点,然后初始化消除重复操作节点,最后将消除重复操作节点的左指针指向上一个节点,转至步骤306,否则执行步骤308,先初始化排序操作节点,后将排序操作节点的左指针指向上一个节点,转至步骤306;
步骤306,将当前操作节点作为根节点返回。
多表查询的查询计划树产生方法包括以下三步:第一步,把查询条件中的单表查询条件和连接查询条件分开;第二步,根据连接查询条件建立连接操作队列;第三步,连接操作队列中的元素依次出队,并形成计划树。
参见图4所示,图4为多表查询的查询计划树产生方法中第二步所述建立连接操作队列的流程图。其过程如下:
步骤401,判断连接查询条件个数是否大于0,如果是,则执行步骤402,否则执行步骤406;
步骤402,将第一个连接查询条件的左边的表入队;
步骤403,将第一个连接查询条件的右边的表和连接信息入队;
步骤404,判断是否还有未处理的连接查询条件,如果是,则执行步骤405,否则,执行步骤406;
步骤405,判断未处理的连接条件左右两端的表中是否已有一个表在队列中,如果是,则执行步骤407,取出这个连接条件,把该连接查询条件的另一个表和连接信息入队,然后返回步骤404,否则,执行步骤408,从查询的所有表中顺序取一个不在队中的表,取出这个连接条件,把连接比较符设为笛卡尔积并入队,然后返回步骤404;
步骤406,把其余不在连接条件中且不在队中的表依次加入队列,并把连接比较符设为笛卡尔积。
为更好说明上述建立连接操作队列的方法,现用一简单的例子说明。例如,查询SQL语句为:select*from table1,table2,table3,table4,table5 where table1.a=table2.a and table3.b=table4.b,建立连接操作队列的过程如下,共5步:
第一步,由于第一个查询条件和第二个查询条件分别为table1.a=table2.a和table3.b=table4.b,查询条件个数是否大于0,因此把第一个连接查询条件table1.a=table2.a的左边的表table1入队,获得队列如图5中的(a)图;
第二步,把第一个连接查询条件table1.a=table2.a的右边的表table2和连接信息table1.a=table2.a入队,获得队列如图5中的(b)图;
第三步,处理第二个查询条件table3.b=table4.b,判断该连接条件table3.b=table4.b左右两端的表table3和table4中是否已有一个表在队列中,发现table3和table4不在队列中,则从查询的表table1,table2,table3,table4,table5中顺序取出一个不在队列中的表,由于table1,table2已在第一步和第二步入队,则取出的应是table3,把table3入队,将连接比较符“,”设为为笛卡尔积,用符号’*’表示,获得队列如图5中的(c)图;
第四步,判断连接条件table3.b=table4.b左右两端的表table3和table4中是否已有一个表在队列中,发现table3在队列中,把另一个表table4和连接信息入队,获得队列如图5中的(d)图;
第五步,已经没有连接条件,把其余不在连接条件中且不在队列中的表依次加入队列并把连接比较符设为笛卡尔积,即将剩余的表table5入队,连接比较符“,”设为笛卡尔积,用符号’*’表示,获得队列如图5中的(e)图。
参见图6所示,图6为多表查询的查询计划树产生方法中第三步所述连接操作队列中元素依次出队,形成计划树的流程图。其过程如下:
步骤601,从连接操作队列中取出一个表;
步骤602,判断该表上是否有选择和投影操作,如果有则执行步骤603,根据单表查询计划树的生成方法生成该表的单表查询计划子树,开将该单表查询计划子树作为左子树,然后执行步骤604,否则转至步骤606;
步骤604,判断连接操作队列是否为空,如果是则返回步骤601,否则执行步骤605;
步骤605,把本树节点和上一个子树节点形成一个连接操作节点,即从连接操作队列中取出一个表和连接条件,根据单表查询计划树生成该表的单表查询计划子树,并将该单表查询计划子树作为右子树,然后根据连接条件初始化连接操作节点,再将连接操作节点的左右指针分别指向左右子树,本连接操作节点作为下次连接操作的左子树;
步骤606,判断是否需要排序,如果是则执行步骤607,否则,转至步骤610;
步骤607,判断是否需要消除重复记录,如果是则执行步骤608,否则,转至步骤609,生成排序节点,排序节点指向上一树节点,即初始化排序操作节点,将排序操作节点的左指针指向上一个节点,再执行步骤610;
步骤608,生成消除重复操作的树节点,树节点指向上一个树节点,即先初始化排序操作节点,接着将排序操作节点的左指针指向上一个节点,然后初始化消除重复操作节点,最后将消除重复操作节点的左指针指向上一个节点,再执行步骤610;
步骤610,将当前操作节点作为根节点。
为更好地说明上述连接操作队列中元素依次出队,形成计划树的过程,现用一简单的例子说明。例:table1由两个字符串类型的域构成:a,b;table2由两个字符串类型的域构成:c,d。
查询SQL语句为:select*from table1.a,table2.d where table1.a=’yangbl’andtable2.c=’dinggang’
其查询计划树是这样生成的:
第一步,连接操作队列中依次有table1、table2,由于被投影的域b不存在于选择条件表达式table1.a=’yangbl’中,因此先进行投影操作,再进行选择操作,从连接操作队列中取出一个表table1,作为投影操作的左子树,根据单表查询计划树的生成方法,生成该表上的单表查询计划子树,如图7中虚线框701内所示,该单表查询计划子树作为查询计划树的左子树;
第二步,由于被投影的域c存在选择条件表达式table2.c=’dinggang’中,因此先进行选择操作,再进行投影操作,从连接操作队列中取出一个表table2,作为选择操作的左子树,根据单表查询计划树的生成方法,生成该表上的单表查询计划子树,如7图中虚线框702内所示,该单表查询计划子树作为查询计划树的右子树;
第三步,由于连接操作队列为空,生成连接操作节点,第一步的左子树和第二步的右子树分别作为连接操作节点的左子树和右子树,由于SQL语句中没有要求排序和消除重复,所以该二叉树没有排序操作和消除重复操作的树节点,连接操作节点作为根节点。
以下说明嵌入式数据库查询的处理中的后序遍历查询计划二叉树和释放上述查询计划二叉树的步骤。
参见图8所示,图8为后续遍历查询计划树并执行各个树节点上的操作的流程图。判断根节点是否不空,如果是则先递归调用后续遍历执行左子树,接着递归调用后续遍历执行右子树,最后执行根节点上的操作,否则结束。
参见图9所示,图9为释放查询计划树的流程图。判断根节点是否不空,如果是,则先递归调用后续遍历释放左子树,接着递归调用后续遍历释放右子树,最后释放根节点,否则结束。

Claims (9)

1、一种嵌入式数据库查询的处理方法,其特征在于,该方法至少包括以下步骤:
A)判断查询条件中是否含有合并操作逻辑运算符,如果没有,则
判断该查询为单表查询还是多表查询,如果是单表查询,则判断被投影的各域是否出现在选择条件中,如果是,则先生成投影操作节点,再生成选择操作节点,然后执行步骤B,否则,先生成选择操作节点,再生成投影操作节点,然后执行步骤B,
如果是多表查询,则先把查询条件中的单表查询条件和连接查询条件分开,然后将所有连接查询条件左右两端的表和连接信息建立一连接操作队列,最后依次取出连接操作队列中的表,依次生成所取表的单表查询计划子树,把当前子树节点和上一子树节点形成一个连接操作节点,以此循环直至连接操作队列为空,然后执行步骤B,
如果查询条件中含有合并操作逻辑运算符,则由所述合并操作逻辑运算符分隔的各个条件表达式产生查询计划子树,然后在所述的查询子树中选出两个作为源数据生成合并操作节点,该合并操作节点再和下一个查询计划子树的根节点作为源数据生成合并操作节点,以此循环直至查询条件中合并操作均对应有一合并操作节点,将最后的合并操作节点作为查询计划树根节点,形成查询计划树,然后执行步骤C;
B)判断是否需要排序,如果是,则判断是否需要消除重复记录,如果是则生成消除重复操作的树节点,将该树节点指向上一树节点,再将当前操作节点作为根节点,形成查询计划树,否则生成排序树节点,将该排序树节点指向上一树节点,再将当前操作节点作为根节点,形成查询计划树,如果不需要排序,则将当前操作节点作为根节点,形成查询计划树;
C)后序遍历查询计划树,并且执行每一个树节点上的操作;
D)释放所述查询计划数。
2、如权利要求1所述的处理方法,其特征在于,步骤B所述的生成排序树节点、将该排序树节点指向上一树节点步骤进一步包括:先初始化排序操作节点,然后将所述排序操作节点的左指针指向上一个节点;所述生成消除重复操作的树节点、将该树节点指向上一树节点的步骤进一步包括先初始化排序操作节点,接着将排序操作节点的左指针指向上一个节点,然后初始化消除重复操作节点,最后将消除重复操作节点的左指针指向上一个节点。
3、如权利要求1所述的处理方法,其特征在于,步骤A所述的单表查询的步骤进一步包括以下步骤:判断查询中是否存在选择条件,如果存在选择条件,则判断查询域的个数是否小于总的域数,如果是,则在被投影的各域出现在选择条件中时,先初始化选择操作节点,再初始化投影操作节点,最后将投影操作节点的左指针指向选择操作节点,在被投影的各域不出现在选择条件中时,先初始化投影操作节点,再初始化选择操作节点,最后将选择操作节点的左指针指向投影操作节点;如果不存在选择条件或者查询域的个数不小于总的域数,则生成选择操作节点并初始化。
4、如权利要求1所述的处理方法,其特征在于,步骤A所述建立连接操作队列的步骤进一步包括:
01)判断连接查询条件个数是否大于0,如果是,则先将第一个连接查询条件的左边的表入队,再将第一个连接查询条件的右边的表和连接信息入队,然后执行步骤02,否则转至步骤03;
02)判断是否还有未处理的连接查询条件,如果是,判断所述未处理的连接查询条件左右两端的表中是否已有一个表在队列中,如果所述未处理的连接查询条件左右两端的表中已有一个表在队列中,则把该连接查询条件的另一个表和连接信息入队,然后返回步骤02,如果所述未处理的连接查询条件左右两端的表中没有任一个表在队列中,则从查询的所有表中顺序取一个不在队列中的表,把连接比较符设为笛卡尔积并入队,然后返回步骤02,如果没有未处理的连接查询条件,则执行步骤03;
03)把其余不在连接条件中且不在队中的表依次加入队列,,再把连接比较符设为笛卡尔积并入队。
5、如权利要求1所述的处理方法,其特征在于,步骤A所述依次取出连接操作队列中的表、依次生成所取表的单表查询计划子树、把当前子树节点和上一子树节点形成一个连接操作节点的步骤进一步包括:
001)判断依次从连接操作队列中取出的一个表上是否有选择和投影操作,如果有,则生成该表上的单表查询计划子树,并将该单表查询计划子树作为左子树,否则转至所述步骤B;
002)判断连接操作队列是否为空,如果是则返回步骤001,否则,从连接操作队列中取出一个表和连接条件,根据单表查询计划树的生成该表的单表查询计划子树,并将该单表查询计划子树作为右子树,然后根据连接条件初始化连接操作节点,再将连接操作节点的左右指针分别指向左右子树,本连接操作节点作为下次连接操作的左子树。
6、如权利要求1所述的处理方法,其特征在于,所述步骤C进一步包括:判断根节点是否不空,如果是则先递归调用后续遍历执行左子树,接着递归调用后续遍历执行右子树,最后执行根节点上的操作,否则结束后续遍历查询计划树。
7、如权利要求1所述的处理方法,其特征在于,所述步骤D进一步包括:判断根节点是否不空,如果是,则先递归调用后续遍历释放左子树,接着递归调用后续遍历释放右子树,最后释放根节点,否则结束释放查询计划树。
8、如权利要求1所述的处理方法,其特征在于,所述的查询计划树采用二叉树的存储结构表示。
9、如权利要求1所述的处理方法,其特征在于,所述查询计划树节点存储有操作编号、选择操作信息指针、投影操作信息指针、连接操作信息指针、排序操作信息指针、合并操作信息指针、消除重复操作信息指针、操作结果信息指针、左子树指针以及右子树指针。
CNB021459576A 2002-10-25 2002-10-25 嵌入式数据库查询的处理方法 Expired - Fee Related CN100399324C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB021459576A CN100399324C (zh) 2002-10-25 2002-10-25 嵌入式数据库查询的处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB021459576A CN100399324C (zh) 2002-10-25 2002-10-25 嵌入式数据库查询的处理方法

Publications (2)

Publication Number Publication Date
CN1492361A true CN1492361A (zh) 2004-04-28
CN100399324C CN100399324C (zh) 2008-07-02

Family

ID=34232563

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021459576A Expired - Fee Related CN100399324C (zh) 2002-10-25 2002-10-25 嵌入式数据库查询的处理方法

Country Status (1)

Country Link
CN (1) CN100399324C (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100338966C (zh) * 2004-06-08 2007-09-19 中兴通讯股份有限公司 一种移动通讯系统嵌入式数据库信息的查探方法
CN100397396C (zh) * 2005-10-31 2008-06-25 北京神舟航天软件技术有限公司 基于谓词关键度分析的查询计划缓存方法及其系统
CN100452047C (zh) * 2005-12-27 2009-01-14 国际商业机器公司 执行关系数据库搜索的系统和方法
CN101408877B (zh) * 2007-10-10 2011-03-16 英业达股份有限公司 树节点加载系统及其方法
CN102226897A (zh) * 2011-05-13 2011-10-26 南京烽火星空通信发展有限公司 一种综合索引查询方法及装置
CN102262675A (zh) * 2011-08-12 2011-11-30 北京握奇数据系统有限公司 数据库查询方法及智能卡
CN102306086A (zh) * 2011-08-12 2012-01-04 北京握奇数据系统有限公司 一种智能卡数据输出的方法和智能卡
CN102609453A (zh) * 2012-01-11 2012-07-25 中国农业大学 一种嵌入式文件搜索方法及系统
CN102982147A (zh) * 2012-11-26 2013-03-20 深圳市华为技术软件有限公司 一种提高数据信息整合效率的方法和装置
CN101438244B (zh) * 2006-05-04 2013-06-12 微软公司 用于在编程语言中深嵌入表达式树的通用接口
CN104142929A (zh) * 2013-05-07 2014-11-12 苏州精易会信息技术有限公司 表单条件查询过程的树状显示方法
CN104298699A (zh) * 2013-07-19 2015-01-21 国际商业机器公司 固定和可变长度数据库列的卸载投影的方法和系统
CN104657447A (zh) * 2015-02-05 2015-05-27 上海达梦数据库有限公司 面向数据库管理系统的计划树优化方法和装置
WO2015184762A1 (zh) * 2014-11-06 2015-12-10 中兴通讯股份有限公司 数据库查询方法及装置
CN105512320A (zh) * 2015-12-18 2016-04-20 北京金山安全软件有限公司 一种用户排名获得方法、装置及服务器
CN105718593A (zh) * 2016-01-28 2016-06-29 长春师范大学 一种数据库查询优化方法及系统
CN107784032A (zh) * 2016-08-31 2018-03-09 华为技术有限公司 一种数据查询结果的渐进式输出方法、装置及系统
CN109947892A (zh) * 2017-12-04 2019-06-28 阿里巴巴集团控股有限公司 分析路径确定方法及系统、界面、日志树构建方法
CN112699140A (zh) * 2019-10-23 2021-04-23 阿里巴巴集团控股有限公司 数据处理方法、装置、设备和存储介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5293556A (en) * 1991-07-29 1994-03-08 Storage Technology Corporation Knowledge based field replaceable unit management
JP2541450B2 (ja) * 1993-06-15 1996-10-09 日本電気株式会社 移動体加入者接続方式
US6047056A (en) * 1997-10-31 2000-04-04 Ericsson Inc. Method to suppress number portability database queries for calls routed on non-ported numbers
CN1154949C (zh) * 1998-07-22 2004-06-23 英业达股份有限公司 数据库的模糊输入查询处理方法

Cited By (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100338966C (zh) * 2004-06-08 2007-09-19 中兴通讯股份有限公司 一种移动通讯系统嵌入式数据库信息的查探方法
CN100397396C (zh) * 2005-10-31 2008-06-25 北京神舟航天软件技术有限公司 基于谓词关键度分析的查询计划缓存方法及其系统
CN100452047C (zh) * 2005-12-27 2009-01-14 国际商业机器公司 执行关系数据库搜索的系统和方法
CN101438244B (zh) * 2006-05-04 2013-06-12 微软公司 用于在编程语言中深嵌入表达式树的通用接口
CN101408877B (zh) * 2007-10-10 2011-03-16 英业达股份有限公司 树节点加载系统及其方法
CN102226897A (zh) * 2011-05-13 2011-10-26 南京烽火星空通信发展有限公司 一种综合索引查询方法及装置
CN102262675A (zh) * 2011-08-12 2011-11-30 北京握奇数据系统有限公司 数据库查询方法及智能卡
CN102306086A (zh) * 2011-08-12 2012-01-04 北京握奇数据系统有限公司 一种智能卡数据输出的方法和智能卡
CN102306086B (zh) * 2011-08-12 2013-08-21 北京握奇数据系统有限公司 一种智能卡数据输出的方法和智能卡
CN102609453A (zh) * 2012-01-11 2012-07-25 中国农业大学 一种嵌入式文件搜索方法及系统
CN102982147A (zh) * 2012-11-26 2013-03-20 深圳市华为技术软件有限公司 一种提高数据信息整合效率的方法和装置
CN102982147B (zh) * 2012-11-26 2016-03-30 深圳市华为技术软件有限公司 一种提高数据信息整合效率的方法和装置
CN104142929A (zh) * 2013-05-07 2014-11-12 苏州精易会信息技术有限公司 表单条件查询过程的树状显示方法
CN104298699A (zh) * 2013-07-19 2015-01-21 国际商业机器公司 固定和可变长度数据库列的卸载投影的方法和系统
CN104298699B (zh) * 2013-07-19 2017-11-24 国际商业机器公司 固定和可变长度数据库列的卸载投影的方法和系统
WO2015184762A1 (zh) * 2014-11-06 2015-12-10 中兴通讯股份有限公司 数据库查询方法及装置
CN104657447A (zh) * 2015-02-05 2015-05-27 上海达梦数据库有限公司 面向数据库管理系统的计划树优化方法和装置
CN104657447B (zh) * 2015-02-05 2018-04-03 上海达梦数据库有限公司 面向数据库管理系统的计划树优化方法和装置
CN105512320A (zh) * 2015-12-18 2016-04-20 北京金山安全软件有限公司 一种用户排名获得方法、装置及服务器
CN105512320B (zh) * 2015-12-18 2019-03-01 北京金山安全软件有限公司 一种用户排名获得方法、装置及服务器
CN105718593A (zh) * 2016-01-28 2016-06-29 长春师范大学 一种数据库查询优化方法及系统
CN105718593B (zh) * 2016-01-28 2019-04-16 长春师范大学 一种数据库查询优化方法及系统
CN107784032A (zh) * 2016-08-31 2018-03-09 华为技术有限公司 一种数据查询结果的渐进式输出方法、装置及系统
CN107784032B (zh) * 2016-08-31 2020-06-16 华为技术有限公司 一种数据查询结果的渐进式输出方法、装置及系统
CN109947892A (zh) * 2017-12-04 2019-06-28 阿里巴巴集团控股有限公司 分析路径确定方法及系统、界面、日志树构建方法
CN109947892B (zh) * 2017-12-04 2023-01-06 阿里巴巴集团控股有限公司 分析路径确定方法及系统、界面、日志树构建方法
CN112699140A (zh) * 2019-10-23 2021-04-23 阿里巴巴集团控股有限公司 数据处理方法、装置、设备和存储介质
CN112699140B (zh) * 2019-10-23 2023-12-26 阿里巴巴集团控股有限公司 数据处理方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN100399324C (zh) 2008-07-02

Similar Documents

Publication Publication Date Title
CN1492361A (zh) 嵌入式数据库查询的处理方法
US8166022B2 (en) System, method, and apparatus for parallelizing query optimization
US8037059B2 (en) Implementing aggregation combination using aggregate depth lists and cube aggregation conversion to rollup aggregation for optimizing query processing
EP1738290B1 (en) Partial query caching
US6021405A (en) System and method for optimizing database queries with improved performance enhancements
US8332389B2 (en) Join order for a database query
US10762087B2 (en) Database search
Jiang et al. Efficient processing of XML twig queries with OR-predicates
Cheng et al. Efficient query processing on graph databases
CN1858737A (zh) 一种数据搜索的方法和系统
CN1928866A (zh) 用于处理包括半连接的查询的方法和系统
CN1716246A (zh) 用于web应用的多列多数据类型的国际化排序扩展方法
CN1845104A (zh) 信息智能检索加工的系统和方法
CN1786962A (zh) 完美双数组trie树词典管理与检索方法
CN1492367A (zh) 询问应答系统及询问应答方法
Katsifodimos et al. Materialized view selection for XQuery workloads
CN1588358A (zh) 对mdx多维数据查询语句的处理方法和系统
CN101075239A (zh) 一种复合搜索方法和系统
CN1543150A (zh) 分组分类装置和使用字段级特里结构的方法
CN101075255A (zh) 去除sql查询语句恒条件的方法
US9336271B2 (en) Optimizing a query
CN103064841A (zh) 检索装置和检索方法
CN1571966A (zh) 信息检索方法、信息检索程序、和记录有信息检索程序的计算机可读记录介质
CN1825306A (zh) 基于关系数据库的xml数据存储与访问方法
CN1345426A (zh) 用于提取索引关键字数据字段的系统和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20080702

Termination date: 20201025

CF01 Termination of patent right due to non-payment of annual fee