CN101075255A - 去除sql查询语句恒条件的方法 - Google Patents

去除sql查询语句恒条件的方法 Download PDF

Info

Publication number
CN101075255A
CN101075255A CN200710100359.6A CN200710100359A CN101075255A CN 101075255 A CN101075255 A CN 101075255A CN 200710100359 A CN200710100359 A CN 200710100359A CN 101075255 A CN101075255 A CN 101075255A
Authority
CN
China
Prior art keywords
node
chained list
false
constant
interval
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
CN200710100359.6A
Other languages
English (en)
Other versions
CN100535905C (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.)
Beijing Shenzhou Aerospace Software Technology Co ltd
Original Assignee
Beijing Shenzhou Aerospace Software Technology Co 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 Beijing Shenzhou Aerospace Software Technology Co ltd filed Critical Beijing Shenzhou Aerospace Software Technology Co ltd
Priority to CNB2007101003596A priority Critical patent/CN100535905C/zh
Publication of CN101075255A publication Critical patent/CN101075255A/zh
Application granted granted Critical
Publication of CN100535905C publication Critical patent/CN100535905C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

本发明是一种去除SQL查询语句恒条件的方法,包括创建链表、合并链表和改写查询语句三个步骤。它将CHECK约束和WHERE条件都转换成查询树的子树,叶节点是表达式节点,其他的节点是AND或者OR节点,对这两个子树进行后序遍历,遇到表达式节点则生成一个列属性链表,遇到AND或者OR节点则合并该节点的子树的列属性链表,在合并链表的过程中,若发现恒真或恒假条件,则将条件节点改写为TRUE或FALSE常量节点,若最后该子树的根节点被改写为TRUE,则WHERE条件可以去掉;若根节点被改写为FALSE,则该SQL查询可以直接改写为空查询。由于本发明在语义级别上有效地消去了SQL查询语句的恒条件,因而避免了无关紧要的查询处理,显著降低了数据库系统执行器对恒真恒假查询条件的处理开销。

Description

去除SQL查询语句恒条件的方法
技术领域
本发明涉及一种改写SQL查询语句的方法,具体地说,是涉及一种利用链表来去除SQL查询语句中存在的恒条件的方法。
背景技术
在日常应用中,数据库经常需要处理大规模的数据,查询是用户经常使用的操作,一个复杂的查询语句会使数据库系统进行大量繁琐的数据处理,如WHERE条件的复杂度能很大地影响数据库的查询速度。
目前,公知的数据库查询优化技术都不能在语义级别消去复杂的WHERE恒条件,这样就导致了查询执行器在扫描表的每一行时都需要用WHERE条件进行筛选,从而大大增加了数据处理开销。若查询优化器能从语义判断上消去一些不必要的WHERE条件的话,执行器便会显著减少运行时间,提高系统的整体性能,故如何去除SQL查询语句中的恒条件是今后查询优化的关键。
发明内容
本发明的目的是提供一种去除SQL查询语句恒条件的方法,该方法根据查询语句来创建链表、合并链表,可在语义级别上有效地消去SQL查询语句的恒条件,显著降低数据库系统执行器的处理开销。
为实现上述目的,本发明采用以下技术方案:
一种去除SQL查询语句恒条件的方法,它包括以下步骤:
创建链表步骤:首先将CHECK约束和WHERE条件都转换成查询树的子树,其中,叶节点是CHECK约束和WHERE条件中的表达式节点,其他的节点是AND或者OR节点,然后对CHECK约束子树和WHERE条件子树进行后序遍历,遇到表达式节点则生成一个列属性链表;
合并链表步骤:在进行后序遍历过程中,遇到AND或者OR节点则合并该节点的子树的列属性链表;
改写查询语句步骤:在合并链表的过程中,若发现恒真或恒假条件,则将条件节点改写为TRUE或FALSE常量节点,若最后该子树的根节点被改写为TRUE,则去掉WHERE条件;若根节点被改写为FALSE,则将该SQL查询直接改写为空查询。
本发明的优点是:由于在语义级别上有效地消去了SQL查询语句的恒条件,因而避免了无关紧要的查询处理,显著降低了数据库系统执行器对恒真恒假查询条件的处理开销。
附图说明
图1是本发明方法流程简图;
图2是CHECK约束和WHERE条件转换后的树结构示意图;
图3是结构体的构成示意图;
图4是列属性链表和区间链表示意图;
图5是创建链表的流程图;
图6是合并列属性链表的流程图;
图7是用AND逻辑合并区间链表的流程图;
图8是用OR逻辑合并区间链表的流程图;
图9是本发明的一个实施例示意图;
图10是优化查询语句的一般流程。
具体实施方式
在OSCAR数据库中,parser语法解析子模块将字符串形式的SQL查询语句转换成一个parse tree结构,然后analyze语义分析子模块将parse tree结构转换成内部识别的Query查询树结构,SQL语句的不同部分转换成了查询树的各个子树,接下来Optimizer查询优化模块对Query结构进行优化,生成执行计划Plan,提交给Executer执行器模块执行得到查询结果。本发明位于Optimizer模块中基于规则的优化子模块中。
本发明方法包括图1所示的三个步骤:创建链表、合并链表和改写查询语句。
本发明首先将CHECK约束和WHERE条件都转换成查询树的子树,表达式的树结构如图2所示,叶节点是表达式节点,如“列=1”、“列IS NOT NULL”等等,其他的节点是AND或者OR节点。本发明对这两个子树进行后序遍历,遇到表达式节点则生成一个列属性链表,遇到AND或者OR节点则合并该节点的子树的列属性链表,在合并链表的过程中,若发现恒真或恒假条件,则将条件节点改写为TRUE或FALSE常量节点。若最后该子树的根节点被改写为TRUE,则WHERE条件可以去掉;若根节点被改写为FALSE,则该SQL查询可以直接改写为空查询。
本发明对CHECK约束和WHERE条件的树结构进行后序遍历,遇到表达式节点就创建列属性链表,遇到AND或OR节点就合并链表并改写查询语句,这个递归的过程一直持续到遍历完树中每个节点。因为在CHECK约束和WHERE条件的树结构中,叶节点都是表达式节点,其他的节点都是AND或OR节点,因此采用后序遍历能确保对于AND或OR连接的各个表达式,先分别生成它们的列属性链表,再根据AND或OR语义合并成一个链表。
下面结合附图对本发明方法作详细说明。
一.创建链表步骤
本发明的第一步骤创建链表,是指遍历CHECK约束和WHERE条件时,对遇到的每个表达式创建结构体ExprListNode,并由该结构体生成一个单节点的列属性链表。
如图3所示,结构体ExprListNode有四个域:(1)col:列名;(2)is_null:CHECK约束和WHERE条件中有没有对该列的IS NULL约束;(3)is_not_null:CHECK约束和WHERE条件中有没有对该列的IS NOT NULL约束;(4)exprFieldList:列的区间链表,区间链表的每个节点为一ExprField结构体,每个节点表示该列在CHECK约束和WHERE条件语句中出现的一个区间,节点间的关系体现为区间之间的OR连接。结构体ExprField也有四个域:(1)minnum:区间的左边界;(2)maxnum:区间的右边界:(3)left_is_close:左边界是否为闭区间;(4)right_is_close:右边界是否为闭区间。
依照上述结构体ExprListNode和结构体ExprField的定义,对CHECK约束和WHERE条件语句中出现的每个表达式分别创建结构体ExprListNode和结构体ExprField,然后将结构体ExprField链接到结构体ExprListNode的exprFieldList域中,如图4所示的若干列属性链表和区间链表实例,区间链表是列属性链表的exprFieldList域中所挂的链表。
创建链表的具体流程如图5所示,包括步骤:
1、创建结构体ExprListNode,is_null和is_not_null域赋初值为FALSE,exprFieldList域赋初值为空链表。将表达式中的列提取出来赋值给ExprListNode的col域。
2、如果表达式是IS NULL或者IS NOT NULL约束,则将ExprListNode结构体中对应的域赋值为TRUE,转到5。
3、如果表达式是(列 操作符 常数),则创建ExprField结构体ExprField1,ExprField1的minnum和maxnum域赋初值为空指针NULL,left_is_close和right_is_close域赋初值为FALSE。
4、判断表达式的操作符
(a)若是列=常数con,表示为区间[con,con],则ExprField1各个域赋值为(con,con,TRUE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
(b)若是列<常数con,表示为区间(-∞,con),则ExprField1各个域赋值为(NULL,con,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
(c)若是列<=常数con,表示为区间(-∞,con],则ExprField1各个域赋值为(NULL,con,FALSE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
(d)若是列>常数con,表示为区间(con,+∞),则ExprField1各个域赋值为(con,NULL,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
(e)若是列>=常数con,表示为区间[con,+∞),则ExprField1各个域赋值为(con,NULL,TRUE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
(f)若是列<>常数con,表示为区间(-∞,con)∪(con,+∞),则ExprField1各个域赋值为(NULL,con,FALSE,FALSE),创建ExprField结构体ExprField2,各个域赋值为(con,NULL,FALSE,FALSE),用ExprField1和ExprField2生成两个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到5;
5、返回用ExprListNode生成的单个节点的链表,结束。
二.合并链表步骤
本发明的第二步骤合并链表是指遍历CHECK约束和WHERE条件时,对遇到的每个AND或OR节点,将该节点的所有子树的列属性链表合并成一个链表,合并后的新链表是按照列序号进行排序的。合并列属性链表的具体流程如图6所示,包括步骤:
1、如果两链表都为空,返回空链表;
2、如果一个链表为空,若操作符为AND则返回空链表;若操作符为OR则返回另一个非空的链表;
3、对两个链表,依次将序号小的列的节点连接到新链表后面,并将这个链表的指针后移一位,如果两列是同一列,则合并两个ExprListNode节点的exprFieldList域,即先合并两列的列属性链表后再连接到新链表后面;
4、如果有一个链表的指针为空了,则将另一个链表的剩余部分连接到新链表后面,返回新链表。
其中,步骤3中的合并两相同列的区间链表,对于AND连接的表达式生成的列属性链表和OR连接的表达式生成的列属性链表,实现合并的方法是不同的。我们用穷举法列出用AND和OR连接各种类型的表达式生成的区间链表的规则:ExprListNode结构的节点简单记为(is_null,is_not_null,exprFieldList)。is_null和is_not_null可以取值TRUE和FALSE,分别表示col IS NULL和col IS NOTNULL,exprFieldList可以取值为空链表和非空链表,表示除了col IS NULL和col IS NOT NULL之外的其他表达式,如col>1。
(1)is_null和is_not_null不能同时为TRUE,因为链表合并时会判断为恒假条件而消去;
(2)ExprListNode结构的节点不会是(FALSE,TRUE,非空链表),例如:(a)col>1 and col IS NOT NULL,链表合并成了col>1;(b)col>1 or col IS NOTNULL,链表合并成了col IS NOT NULL。
(3)ExprListNode结构的节点不会是(FALSE,FALSE,空链表),因为不含任何表达式的空指针不会建立区间链表。
因此ExprListNode结构的节点只有四种状态,分别为:
状态1:(TRUE,FALSE,空链表),表示:col IS NULL
状态2:(TRUE,FALSE,非空链表),表示:col IS NULL or其他表达式
状态3:(FALSE,TRUE,空链表),表示:col IS NOT NULL
状态4:(FALSE,FALSE,非空链表),表示:其他表达式
用AND合并表达式的列属性链表的规则见表1:
AND操作结果                              节点1
  状态1 状态2 状态3 状态4
节点2 状态1 无操作 节点1的区间链表=空链表 恒假条件 恒假条件
状态2 无操作 节点1的区间链表=两个区间链表用AND合并 节点1->is_not_null=false节点1的区间链表=节点2的区间链表 节点1的区间链表=两个区间链表用AND合并
状态3   恒假条件 节点1->is_null=false 无操作 无操作
状态4 恒假条件 节点1->is_null=false节点1的区间链表=两个区间链表用AND合并 节点1->is_not_null=false节点1的区间链表=节点2的区间链表 节点1的区间链表=两个区间链表用AND合并
                                      表1
用OR合并的表达式的列属性链表的规则见表2:
OR操作结果                               节点1
状态1 状态2 状态3 状态4
节点2 状态1 无操作 无操作 恒真条件 节点1->is_null=true
状态2 节点1的区间链表=节点2的区间链表 节点1的区间链表=两个区间链表用OR合并 恒真条件 节点1->is_null=true节点1的区间链表=两个区间链表用OR合并
状态3 恒真条件 节点1->is_null=false 无操作 节点1->is_not_null=true节点1的区间链表=空链表
状态4 节点1的区间链表=节点2的区间链表 节点1的区间链表=两个区间链表用OR合并 无操作 节点1的区间链表=两个区间链表用OR合并
                               表2
如图7所示,用AND逻辑实现合并两相同列的区间链表的过程为:
1、若两个链表中有空链表,则把另一个链表连接到新链表后,返回新链表;
2、两个指针所指的节点表示的区间有交集,则将交集连接到新链表后;
3、如果链表1的指针所指节点的下一个节点与链表2的指针所指节点有交集,则链表1的指针后移;如果链表2的指针所指节点的下一个节点与链表1的指针所指节点有交集,则链表2的指针后移;否则两个指针都后移(这个步骤也可以直接写为两个指针都后移,这样做是为了提高运行效率);
4、转到1。
用OR逻辑实现合并两相同列的区间链表的过程为:
1、如图8-a所示,将两个区间链表的节点依次插入到新链表中,确保新链表的节点按minnum递增排序,过程为:。
(1)若两个链表中有空链表,则把另一个链表连接到新链表后,步骤1完,转步骤2;
(2)将两个链表的指针所指的节点中minnum较小的那个节点连接到新链表后,并且指针后移;若两个链表的指针所指的节点中minnum相等,则左边为闭区间的节点先连接到新链表,然后连接另一个,两个指针都后移;
(3)重复(1)~(2)。
2、如图8-b所示,合并新链表中有交集的节点过程为:依次取出新链表中的ExprField结构的节点,若相邻的两个节点表示的区间有交集,则将它们的交集保存到前一个节点,从链表中删掉后一个节点。
3、返回新链表。
三.改写查询语句步骤
本发明的第三步改写查询语句,是指在第二步合并链表的过程中,若发现恒真或恒假条件,则将条件节点改写为TRUE或FALSE常量节点;若AND节点的儿子节点存在FALSE常量,则将AND子树改写为FALSE常量节点;若AND节点的所有儿子节点都是TRUE常量,则将AND子树改写为TRUE常量节点;若OR节点的儿子节点存在TRUE常量,则将OR子树改写为TRUE常量节点;若OE节点的所有儿子节点都是FALSE常量,则将OR子树改写为FALSE常量节点;若发现几个条件表达式可以合并,则将合并后的条件表达式节点取代原来的子树;若最后WHERE条件的树结构的根节点被改写为TRUE,则WHERE条件可以去掉;若根节点被改写为FALSE,则该SQL查询可以直接改写为空查询。
图9所示为本发明的一个实施例示意图,说明如下:
例如:表T1(TC1 int,TC2 int,TC3 int)上有约束tc1=1。
考虑SQL查询:SELECT * FROM T1 WHERE(TC1<1 OR TC1>1)AND TC2>3;
1、如图9-a所示,CHECK约束和WHERE条件转换成了树结构。
2、后序遍历CHECK约束的树结构,只有一个表达式节点TC1=1,生成如图4-c所示的列属性链表。
3、后序遍历WHERE条件的树结构,先遇到表达式节点TC1<1,生成如图4-e所示的列属性链表,遇到表达式节点TC1>1,生成如图4-d所示的列属性链表,然后遇到OR节点,对这两个列属性链表用OR合并,得到如图9-b所示的列属性链表。然后遇到表达式节点TC2>3,生成如图9-c所示的列属性链表。遍历最后遇到AND节点,将图9-b和图9-c所示的列属性链表用AND合并,得到如图9-d所示的列属性链表。
4、合并CHECK约束和WHERE条件的列属性链表,即用AND合并图4-c和7-d所示的列属性链表,两个列属性链表的TC1列的区间链表用AND合并时,发现它们没有交集,TC1的取值空间是空集,这是一个恒假条件,将WHERE条件的树结构的根节点改写为FALSE,因此SQL查询语句改写成了SELECT * FROM T1WHERE FALSE。
5、将含有WHERE FALSE的这种恒假查询直接改写为空查询:SELECT NULL;
在神舟OSCAR关系数据库系统中,系统使用了两种查询优化器,一种为基于规则的代数优化器,另一种为基于代价的优化器。其中,基于规则的代数优化器使用了本发明的优化方法,具体优化流程如图10所示:对于基于规则的代数优化器接收的每一条SQL查询语句,规则适配器为之选择合适的规则进行优化,如果该查询语句匹配恒条件消去规则的触发条件,则使用该规则处理查询语句,否则使用其他匹配的规则处理该查询语句。用某个规则优化后的查询语句还可以继续用其他的规则对其进行优化,当该查询语句不能触发规则库中任意一个规则时,规则迭代器将优化后的查询语句输出给下一个模块。

Claims (7)

1、一种去除SQL查询语句恒条件的方法,其特征在于它包括步骤:
创建链表步骤:首先将CHECK约束和WHERE条件都转换成查询树的子树,其中,叶节点是CHECK约束和WHERE条件中的表达式节点,其他的节点是AND或者OR节点,然后对CHECK约束子树和WHERE条件子树进行后序遍历,遇到表达式节点则生成一个列属性链表;
合并链表步骤:在进行后序遍历过程中,遇到AND或者OR节点则合并该节点的子树的列属性链表;
改写查询语句步骤:在合并链表的过程中,若发现恒真或恒假条件,则将条件节点改写为TRUE或FALSE常量节点,若最后该子树的根节点被改写为TRUE,则去掉WHERE条件;若根节点被改写为FALSE,则将该SQL查询直接改写为空查询。
2、根据权利要求1所述的去除SQL查询语句恒条件的方法,其特征在于:
在所述创建链表步骤中,遍历CHECK约束和WHERE条件时,对遇到的每个表达式节点创建一结构体ExprListNode,并由该结构体生成一个单节点的列属性链表。
3、根据权利要求2所述的去除SQL查询语句恒条件的方法,其特征在于:
所述结构体ExprListNode有四个域:(1)col:列名;(2)is_null:CHECK约束和WHERE条件中有没有对该列的IS NULL约束;(3)is_not_null:CHECK约束和WHERE条件中有没有对该列的IS NOT NULL约束;(4)exprFieldList:列的区间链表,区间链表的每个节点为一ExprField结构体,每个节点表示该列在CHECK约束和WHERE条件语句中出现的一个区间,节点间的关系体现为区间之间的OR连接,
该结构体ExprField也有四个域:(1)minnum:区间的左边界;(2)maxnum:区间的右边界;(3)left_is_close:左边界是否为闭区间;(4)right_is_close:右边界是否为闭区间。
4、根据权利要求3所述的去除SQL查询语句恒条件的方法,其特征在于:
所述创建链表的步骤是:
步骤(1):创建结构体ExprListNode,对is_null和is_not_null域赋初值FALSE,exprFieldList域赋初值为空链表,将表达式中的列提取出来赋值给col域;
步骤(2):如果表达式是IS NULL或者IS NOT NULL约束,则将ExprListNode结构体中对应的域赋值为TRUE,转到步骤(5);
步骤(3):如果表达式是列+操作符+常数,则创建ExprField结构体ExprField1,ExprField1的minnum和maxnum域赋初值为空指针NULL,left_is_close和right_is_close域赋初值为FALSE;
步骤(4):判断表达式的操作符
(a)若是列=常数con,表示为区间[con,con],则ExprField1各个域赋值为(con,con,TRUE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(b)若是列<常数con,表示为区间(-∞,con),则ExprField1各个域赋值为(NULL,con,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(c)若是列<=常数con,表示为区间(-∞,con],则ExprField1各个域赋值为(NULL,con,FALSE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(d)若是列>常数con,表示为区间(con,+∞),则ExprField1各个域赋值为(con,NULL,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(e)若是列>=常数con,表示为区间[con,+∞),则ExprField1各个域赋值为(con,NULL,TRUE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(f)若是列<>常数con,表示为区间(-∞,con)∪(con,+∞),则ExprField1各个域赋值为(NULL,con,FALSE,FALSE),创建ExprField结构体ExprField2,各个域赋值为(con,NULL,FALSE,FALSE),用ExprField1和ExprField2生成两个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
步骤(5):返回用ExprListNode生成的单个节点的链表,结束。
5、根据权利要求3所述的去除SQL查询语句恒条件的方法,其特征在于:
所述合并列属性链表的过程是:
(1)如果两链表都为空,返回空链表;
(2)如果一个链表为空,若操作符为AND,则返回空链表,若操作符为OR,则返回另一个非空的链表;
(3)对两个链表,依次将序号小的列的节点连接到新链表后面,并将这个链表的指针后移一位,如果两列是同一列,则合并两个ExprListNode节点的exprFieldList域,即先合并两列的列属性链表后再连接到新链表后面;
(4)如果有一个链表的指针为空,则将另一个链表的剩余部分连接到新链表后面,返回新链表。
6、根据权利要求5所述的去除SQL查询语句恒条件的方法,其特征在于当合并两相同列的区间链表时:
若是用AND逻辑实现合并,则合并过程为:
(1)若两个链表中有空链表,则把另一个链表连接到新链表后,返回新链表;
(2)若两个指针所指的节点表示的区间有交集,则将交集连接到新链表后;
(3)如果链表1的指针所指节点的下一个节点与链表2的指针所指节点有交集,则链表1的指针后移;如果链表2的指针所指节点的下一个节点与链表1的指针所指节点有交集,则链表2的指针后移;否则两个指针都后移;
(4)转到(1),
若是用OR逻辑实现合并,则合并过程为:
(5)将两个区间链表的节点依次插入到新链表中,确保新链表的节点按minnum递增排序,其中:。
(5.1)若两个链表中有空链表,则把另一个链表连接到新链表后,转(6),否则继续(5.2);
(5.2)将两个链表的指针所指的节点中minnum较小的那个节点连接到新链表后,并且指针后移;若两个链表的指针所指的节点中minnum相等,则左边为闭区间的节点先连接到新链表,然后连接另一个,两个指针都后移;
(5.3)重复(5.1)~(5.2);
(6)合并新链表中有交集的节点过程为:依次取出新链表中的ExprField结构的节点,若相邻的两个节点表示的区间有交集,则将它们的交集保存到前一个节点,从链表中删掉后一个节点;
(7)返回新链表。
7、根据权利要求1所述的去除SQL查询语句恒条件的方法,其特征在于:
在所述改写查询语句步骤中:
若AND节点的儿子节点存在FALSE常量,则将AND子树改写为FALSE常量节点;若AND节点的所有儿子节点都是TRUE常量,则将AND子树改写为TRUE常量节点,
若OR节点的儿子节点存在TRUE常量,则将OR子树改写为TRUE常量节点;若OR节点的所有儿子节点都是FALSE常量,则将OR子树改写为FALSE常量节点;
若发现几个条件表达式可以合并,则将合并后的条件表达式节点取代原来的子树;
若最后WHERE条件的树结构的根节点被改写为TRUE,则去掉WHERE条件;
若根节点被改写为FALSE,则该SQL查询直接改写为空查询。
CNB2007101003596A 2007-06-08 2007-06-08 去除sql查询语句恒条件的方法 Active CN100535905C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2007101003596A CN100535905C (zh) 2007-06-08 2007-06-08 去除sql查询语句恒条件的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2007101003596A CN100535905C (zh) 2007-06-08 2007-06-08 去除sql查询语句恒条件的方法

Publications (2)

Publication Number Publication Date
CN101075255A true CN101075255A (zh) 2007-11-21
CN100535905C CN100535905C (zh) 2009-09-02

Family

ID=38976308

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101003596A Active CN100535905C (zh) 2007-06-08 2007-06-08 去除sql查询语句恒条件的方法

Country Status (1)

Country Link
CN (1) CN100535905C (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567450A (zh) * 2010-10-28 2012-07-11 微软公司 数据过滤中的Anti使用和模拟
WO2013164832A1 (en) * 2012-04-30 2013-11-07 Hewlett-Packard Development Company, L.P. Storage and evaluation of expressions
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN107506365A (zh) * 2017-06-26 2017-12-22 杭州沃趣科技股份有限公司 一种对输出列进行合并计算的方法
CN108804554A (zh) * 2018-05-22 2018-11-13 上海达梦数据库有限公司 一种数据库查询方法、装置、服务器和存储介质
CN110008238A (zh) * 2019-03-12 2019-07-12 北京东方国信科技股份有限公司 Nlj改进表连接方法及基于该改进方法的数据查询方法
CN110515973A (zh) * 2019-08-30 2019-11-29 上海达梦数据库有限公司 一种数据查询的优化方法、装置、设备及存储介质
CN112069305A (zh) * 2020-11-13 2020-12-11 北京智慧星光信息技术有限公司 数据筛选方法、装置及电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6826562B1 (en) * 1999-11-29 2004-11-30 International Business Machines Corporation Method of simplifying and optimizing scalar subqueries and derived tables that return exactly or at most one tuple
US6529896B1 (en) * 2000-02-17 2003-03-04 International Business Machines Corporation Method of optimizing a query having an existi subquery and a not-exists subquery
CN1801145A (zh) * 2005-01-06 2006-07-12 中兴通讯股份有限公司 一种提高应用系统访问数据库效率的方法

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567450A (zh) * 2010-10-28 2012-07-11 微软公司 数据过滤中的Anti使用和模拟
WO2013164832A1 (en) * 2012-04-30 2013-11-07 Hewlett-Packard Development Company, L.P. Storage and evaluation of expressions
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN104123288B (zh) * 2013-04-24 2018-06-01 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN107506365A (zh) * 2017-06-26 2017-12-22 杭州沃趣科技股份有限公司 一种对输出列进行合并计算的方法
CN108804554A (zh) * 2018-05-22 2018-11-13 上海达梦数据库有限公司 一种数据库查询方法、装置、服务器和存储介质
CN108804554B (zh) * 2018-05-22 2021-03-05 上海达梦数据库有限公司 一种数据库查询方法、装置、服务器和存储介质
CN110008238A (zh) * 2019-03-12 2019-07-12 北京东方国信科技股份有限公司 Nlj改进表连接方法及基于该改进方法的数据查询方法
CN110515973A (zh) * 2019-08-30 2019-11-29 上海达梦数据库有限公司 一种数据查询的优化方法、装置、设备及存储介质
CN112069305A (zh) * 2020-11-13 2020-12-11 北京智慧星光信息技术有限公司 数据筛选方法、装置及电子设备
CN112069305B (zh) * 2020-11-13 2021-03-30 北京智慧星光信息技术有限公司 数据筛选方法、装置及电子设备

Also Published As

Publication number Publication date
CN100535905C (zh) 2009-09-02

Similar Documents

Publication Publication Date Title
CN101075255A (zh) 去除sql查询语句恒条件的方法
CN111309757B (zh) 一种HBase的SQL解释器和优化方法
CN101021874B (zh) 一种对查询sql请求进行优化的方法及装置
CN102033748B (zh) 一种数据处理流程代码的生成方法
Arroyuelo et al. Fast in‐memory XPath search using compressed indexes
CN1492361A (zh) 嵌入式数据库查询的处理方法
CN1881208A (zh) 动态结构化查询语言语句的构造方法
CN110637291A (zh) 在数据库中对trie数据结构的有效使用
CN1845104A (zh) 信息智能检索加工的系统和方法
CN102760143A (zh) 一种在数据库系统中动态整合执行结构的方法和装置
CN106066642B (zh) 基于FP-Tree序列模式挖掘的故障码诊断车辆工项与备件检索方法
CN1858737A (zh) 一种数据搜索的方法和系统
CN1702651A (zh) 特定类型信息文件的识别方法和装置
CN109815283A (zh) 一种异构数据源可视化查询方法
CN106528512B (zh) 一种excel概预算表格自动编排方法
CN101079737A (zh) 一种命令行接口命令的自动构造与解析方法及其系统
CN1825305A (zh) 基于谓词关键度分析的查询计划缓存方法及其系统
CN1543150A (zh) 分组分类装置和使用字段级特里结构的方法
CN1877531A (zh) 一种嵌入式编译体系扫描器的实现方法
CN101055574A (zh) 一种域名类信息的存储及查询方法以及系统
CN101064018A (zh) Hs编码计算机自动查询系统
CN1479461A (zh) 通讯系统故障诊断方法和系统
CN1825306A (zh) 基于关系数据库的xml数据存储与访问方法
Grust et al. A SQL: 1999 code generator for the pathfinder XQuery compiler
CN101076055A (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
CP01 Change in the name or title of a patent holder

Address after: 100036 Beijing city Haidian District Fuchengmen Road, building 17 Yuhui

Patentee after: Beijing Shenzhou Aerospace Software Technology Co.,Ltd.

Address before: 100036 Beijing city Haidian District Fuchengmen Road, building 17 Yuhui

Patentee before: BEIJING SHENZHOU AEROSPACE SOFTWARE TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder