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

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

Info

Publication number
CN100535905C
CN100535905C CNB2007101003596A CN200710100359A CN100535905C CN 100535905 C CN100535905 C CN 100535905C CN B2007101003596 A CNB2007101003596 A CN B2007101003596A CN 200710100359 A CN200710100359 A CN 200710100359A CN 100535905 C CN100535905 C CN 100535905C
Authority
CN
China
Prior art keywords
node
chained list
interval
false
constant
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.)
Active
Application number
CNB2007101003596A
Other languages
English (en)
Other versions
CN101075255A (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

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查询语句恒条件的方法,它包括以下步骤:
创建链表步骤:对SQL查询语句的查询树中的CHECK约束子树和WHERE条件子树进行后序遍历,这两个子树的叶节点是CHECK约束和WHERE条件中的表达式节点,其它的节点是AND或OR节点,遇到表达式节点,则生成一个列属性链表;
合并链表步骤:在进行后序遍历过程中,遇到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,+∞),则ExprField 1各个域赋值为(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>1and col IS NOT NULL,链表合并成了col>1;(b)col>1or 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:
Figure C20071010035900091
表1
用OR合并的表达式的列属性链表的规则见表2;
Figure C20071010035900101
表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 T1WHERE(TC1<1OR 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查询语句恒条件的方法,其特征在于它包括步骤:
创建链表步骤:对SQL查询语句的查询树中的CHECK约束子树和WHERE条件子树进行后序遍历,这两个子树的叶节点是CHECK约束和WHERE条件中的表达式节点,其它的节点是AND或OR节点,遇到表达式节点,则生成一个列属性链表;
合并链表步骤:在进行后序遍历过程中,遇到AND或者OR节点则合并该节点的子树的列属性链表;
改写查询语句步骤:在合并链表的过程中,若发现节点是恒真或恒假条件,则将该节点改写为TRUE或FALSE常量节点,若最后该WHERE条件子树的根节点被改写为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的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(con,con,TRUE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(b)若是列<常数con,表示为区间(-∞,con),则ExprField1的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(NULL,con,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(c)若是列<=常数con,表示为区间(-∞,con],则ExprField1的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(NULL,con,FALSE,TRUE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(d)若是列>常数con,表示为区间(con,+∞),则ExprField 1的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(con,NULL,FALSE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(e)若是列>=常数con,表示为区间[con,+∞),则ExprField1的四个域(minnum.maxnum,left_is_close,right_is_close)分别赋值为(con,NULL,TRUE,FALSE),用ExprField1生成单个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
(f)若是列<>常数con,表示为区间(-∞,con)∪(con,+∞),则ExprField1的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(NULL,con,FALSE,FALSE),创建ExprField结构体ExprField2,ExprField2的四个域(minnum,maxnum,left_is_close,right_is_close)分别赋值为(con,NULL,FALSE,FALSE),用ExprField1和ExprField2生成两个节点的链表,赋值给ExprListNode结构体的exprFieldList域,转到步骤(5);
步骤(5):返回用ExprListNode生成的单个节点的链表,结束。
5、根据权利要求3所述的去除SQL查询语句恒条件的方法,其特征在于:
所述合并列属性链表的过程是:
分别用两个指针指向待合并的列属性链表,定义一个新列属性链表初始为空
(1)如果两列属性链表都为空,返回空列属性链表;
(2)如果一个列属性链表为空,若操作符为AND,则返回空列属性链表,若操作符为OR,则返回另一个非空的列属性链表;
(3)如果指针1指向的节点的列序号小于指针2指向的节点的列序号,则将指针1指向的节点连接到新列属性链表后面,指针1后移一位,并转到(4);如果指针2指向的节点的列序号小于指针1指向的节点的列序号,则将指针2指向的节点连接到新列属性链表后面,指针2后移一位,并转到(4);如果指针1指向的节点的列序号和指针2指向的节点的列序号一致,即两个节点的列是同一列,则合并两个ExprListNode节点的区间链表,即exprFieldList域,将合并后的新的ExprListNode节点连接到新列属性链表后面,两个指针同时后移,并转到第(4)步;
(4)如果有一个列属性链表的指针为空,则将另一个列属性链表指针指向的剩余部分链接到新链表后面,返回新列属性链表;否则转到第(3)步。
6、根据权利要求5所述的去除SQL查询语句恒条件的方法,其特征在于当合并两相同列的区间链表时:
使用两个指针分别指向两个区间链表,定义一个新区间链表初始值为空;
若是用AND逻辑实现合并,则合并过程为:
(6.1)若两个区间链表中有空链表,则返回新区间链表;
(6.2)若两个指针所指的节点表示的区间有交集,则将交集连接到新区间链表后;
(6.3)如果区间链表1的指针所指节点的下一个节点与区间链表2的指针所指节点有交集,则区间链表1的指针后移,并转到(6.4);如果区间链表2的指针所指节点的下一个节点与区间链表1的指针所指节点有交集,则区间链表2的指针后移,并转到(6.4);否则两个指针都后移;
(6.4)转到(6.1),
若是用OR逻辑实现合并,则合并过程为:
(6.5)将两个区间链表的节点依次插入到新区间链表中,确保新区间链表的节点按minnum递增排序,其中:
(6.5.1)若两个区间链表中有空链表,则把另一个区间链表连接到新区间链表后,转(6.6),否则继续(6.5.2);
(6.5.2)将两个区间链表的指针所指的节点中minnum较小的那个节点连接到新区间链表后,并将指向minnum较小的那个节点的指针后移;若两个区间链表的指针所指的节点中minnum相等,则左边为闭区间的节点先连接到新区间链表,然后连接另一个,两个指针都后移;
(6.5.3)重复(6.5.1)~(6.5.2);
(6.6)合并新区间链表中有交集的节点过程为:依次取出新区间链表中的ExprField结构的节点,若相邻的两个节点表示的区间有交集,则将它们的交集保存到前一个节点,从链表中删掉后一个节点;
(6.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 CN101075255A (zh) 2007-11-21
CN100535905C true 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)

Families Citing this family (8)

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

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
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
CN1801145A (zh) * 2005-01-06 2006-07-12 中兴通讯股份有限公司 一种提高应用系统访问数据库效率的方法

Patent Citations (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 中兴通讯股份有限公司 一种提高应用系统访问数据库效率的方法

Also Published As

Publication number Publication date
CN101075255A (zh) 2007-11-21

Similar Documents

Publication Publication Date Title
CN100535905C (zh) 去除sql查询语句恒条件的方法
US7730079B2 (en) Query comprehensions
US5761494A (en) Structured query language to IMS transaction mapper
CN107491561B (zh) 一种基于本体的城市交通异构数据集成系统及方法
Arroyuelo et al. Fast in‐memory XPath search using compressed indexes
CN111309757B (zh) 一种HBase的SQL解释器和优化方法
CN102033748A (zh) 一种数据处理流程代码的生成方法
CN101697121A (zh) 一种基于程序源代码语义分析的代码相似度检测方法
CN102609451A (zh) 面向流式数据处理的sql查询计划生成方法
Tsarfaty et al. Cross-framework evaluation for statistical parsing
CN100399324C (zh) 嵌入式数据库查询的处理方法
CN103617273B (zh) Sql脚本对象化的方法及系统
US20070078816A1 (en) Common sub-expression elimination for inverse query evaluation
CN106933869A (zh) 一种操作数据库的方法和装置
Cherniack et al. Changing the rules: Transformations for rule-based optimizers
Arroyuelo et al. Time-and space-efficient regular path queries
US7366988B2 (en) Method and apparatus for converting a network description into a computer program for disambiguating transmit-by-exception telemetry from a multi-path, multi-tier network
CN110990423A (zh) Sql语句的执行方法、装置、设备和存储介质
Zhang et al. Symmetrically exploiting XML
Fernandez et al. A structure-based approach to querying semi-structured data
KR101225333B1 (ko) 구문론적으로 분석된 텍스트 코퍼스로부터 정보를 추출하는 트리 패턴 표현식을 이용한 시스템 및 방법
US7720807B1 (en) Representing finite node-labeled trees using a one bit encoding
Tziavelis et al. Any-k algorithms for enumerating ranked answers to conjunctive queries
Wang et al. Atlas: A native extension of sql for data mining and stream computations
CN108460006A (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
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.