一种数据查询方法和装置与流程

文档序号:20768748发布日期:2020-05-15 19:21阅读:109来源:国知局
本发明涉及计算机
技术领域
:,特别涉及一种数据查询方法和装置。
背景技术
::sql,(structuredquerylanguage,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。其中,关系数据库系统中,由行和列组成的二维表作为数据存储的最基本的容器,多个二维表之间往往存在关联,因此,每个二维表又称为“关系”。对关系数据库中数据的绝大多数操作,都是通过sql编写而实现的。sql语言具有相当程度的灵活性,针对给定的一个查询内容(或查询需求),可能会存在多种sql写法均能得到目标结果,但是不同的写法,性能耗时往往会有较大的差别。综上所述,现有若使用不适当的sql查询方式则可能导致运算量大,查询耗时较长。技术实现要素:本发明提供一种数据查询方法和装置,用以解决现有若使用不适当的sql查询方式则可能导致运算量大,查询耗时较长的问题。第一方面,本发明实施例提供的一种数据查询方法包括:确定用户输入的查询内容包含的查询条件;根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;根据确定的所述查询优化方案集合生成查询语句;执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。上述方法,预先设置不同查询条件组成的查询条件集合对应的查询优化方案集合,当获取到用户输入的查询内容时,可根据该查询内容包含的查询条件匹配查询条件集合,并根据预设的查询条件集合与查询优化方案的对应关系确定用户输入的查询内容匹配的查询条件集合对应的查询优化方案,并根据确定的查询优化方案生成查询语句,执行查询语句从待查询数据中获取查询结果,本申请可以实现针对不同的查询内容能够灵活的适配最佳的查询优化方案,避免使用单一的优化方式对不同的查询内容构建的查询语句进行固定、统一的优化,本申请查询优化方式更加灵活,应用性较强。在一种可选的实施方式中,所述根据确定的所述查询优化方案集合生成查询语句,包括:若所述查询优化方案集合包含至少两个查询优化方案,则根据查询优化方案的优先级确定针对所述查询内容进行查询时,各查询优化方案的执行顺序;按照所述查询优化方案的执行顺序生成所述查询语句。在一种可选的实施方式中,通过下列方式确定与所述查询内容包含的查询条件匹配的查询条件集合:若历史查询数据未包含所述查询内容包含的任一查询条件,或所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则将仅包含目标查询条件的查询条件集合作为与所述查询内容包含的查询条件匹配的查询条件集合;其中,所述目标查询条件为查询内容包含的且历史查询数据未包含的查询条件。在一种可选的实施方式中,所述方法还包括:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则针对所述历史查询数据包含所述查询内容包含的部分查询条件,从历史查询数据中获取所述历史数据包含的部分查询条件对应的查询结果;所述从待查询数据中获取所述查询内容对应的查询结果之后,包括:根据从所述待查询数据中获取的所述查询结果和从所述历史查询数据中获取的所述查询结果确定最终的查询结果。在一种可选的实施方式中,所述方法还包括:若所述历史查询条件中包含所述查询内容包含的所有查询条件,则获取所述历史查询数据中所述查询内容对应的查询结果。在一种可选的实施方式中,所述方法还包括:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间有交集,则获取所述历史查询数据包所述查询内容包含的部分查询条件对应的查询结果;针对所述未包含的部分查询条件生成对应的复用查询语句;将执行所述复用查询语句从获取的所述查询结果中获取所述未包含的部分查询条件对应的查询结果作为最终的查询结果。在一种可选的实施方式中,所述执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果之后,还包括:将所述目标查询条件与对应的查询结果添加至所述历史查询数据中。在一种可选的实施方式中,所述查询内容包含的查询条件处于待查询数据范围内。在一种可选的实施方式中,所述查询条件包括下列中的部分或全部:输出列表的列信息、列表过滤或对列表进行分组。在一种可选的实施方式中,所述查询优化方案包括下列中的部分或全部:in优化、exists优化或非空唯一优化。第二方面,本发明实施例还提供了一种数据查询的装置,该装置包括:处理器以及存储器,其中,所述存储器存储有程序代码,当所述存储器存储的一个或多个计算机程序被所述处理器执行时,使得所述终端执行下列过程:确定用户输入的查询内容包含的查询条件;根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;根据确定的所述查询优化方案集合生成查询语句;执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。在一种可能的实现方式中,所述处理器具体用于:若所述查询优化方案集合包含至少两个查询优化方案,则根据查询优化方案的优先级确定针对所述查询内容进行查询时,各查询优化方案的执行顺序;按照所述查询优化方案的执行顺序生成所述查询语句。在一种可能的实现方式中,所述处理器通过下列方式确定与所述查询内容包含的查询条件匹配的查询条件集合:若历史查询数据未包含所述查询内容包含的任一查询条件,或所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则将仅包含目标查询条件的查询条件集合作为与所述查询内容包含的查询条件匹配的查询条件集合;其中,所述目标查询条件为查询内容包含的且历史查询数据未包含的查询条件。在一种可能的实现方式中,所述处理器还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则针对所述历史查询数据包含所述查询内容包含的部分查询条件,从历史查询数据中获取所述历史数据包含的部分查询条件对应的查询结果;所述从待查询数据中获取所述查询内容对应的查询结果之后,根据从所述待查询数据中获取的所述查询结果和从所述历史查询数据中获取的所述查询结果确定最终的查询结果。在一种可能的实现方式中,所述处理器还用于:若所述历史查询条件中包含所述查询内容包含的所有查询条件,则获取所述历史查询数据中所述查询内容对应的查询结果。在一种可能的实现方式中,所述处理器还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间有交集,则获取所述历史查询数据包所述查询内容包含的部分查询条件对应的查询结果;针对所述未包含的部分查询条件生成对应的复用查询语句;将执行所述复用查询语句从获取的所述查询结果中获取所述未包含的部分查询条件对应的查询结果作为最终的查询结果。在一种可能的实现方式中,所述执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果之后,所述处理器还用于:将所述目标查询条件与对应的查询结果添加至所述历史查询数据中。在一种可能的实现方式中,所述查询内容包含的查询条件处于待查询数据范围内。在一种可能的实现方式中,所述查询条件包括下列中的部分或全部:输出列表的列信息、列表过滤或对列表进行分组。在一种可能的实现方式中,所述查询优化方案包括下列中的部分或全部:in优化、exists优化或非空唯一优化。第三方面,本发明实施例还提供一种数据查询的装置,该装置包括:第一确定模块:用于确定用户输入的查询内容包含的查询条件;第二确定模块:用于根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;处理模块:用于根据确定的所述查询优化方案集合生成查询语句;执行模块:用于执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结。第四方面,本申请还提供一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面所述方法的步骤。另外,第二方面至第四方面中任一一种实现方式所带来的技术效果可参见第一方面中不同实现方式所带来的技术效果,此处不再赘述。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种数据查询的方法示意图;图2为本发明实施例提供的结合方式一的方法流程示意图;图3为本发明实施例提供的结合方式二的方法流程示意图;图4为本发明实施例第一种数据查询的装置的结构示意图;图5为本发明实施例第二种数据查询的装置的结构示意图。具体实施方式为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。下面对文中出现的一些词语进行解释:1、本发明实施例中术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。2、本申请实施例中术语“多个”是指两个或两个以上,其它量词与之类似。本发明实施例描述的应用场景是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域普通技术人员可知,随着新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。其中,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。sql系统数据库是一种专用于存储大量数据的数据系统,针对同一查询内容,通过不同的sql查询方式都可以获取到查询结果,但是不同的sql查询方式在查询过程中所耗费的“运算量”不同。目前,查询类型的sql按所涉及的算子(查询方式),可以分为如下三种,参见表1:表1因此,在开发人员根据查询内容构建查询类型的sql之后,通过“优化”该sql可起到降低查询时间的作用。示例性的,例如,在关联查询中,可以通过先过滤、再关联来对查询性能进行优化,可以这样理解,若先关联再过滤,则针对需要过滤的数据进行的关联相当于无效运算,增加了查询的时间,因此,对于查询sql的优化,本质是对于核心算子耗时的优化。目前,常见的对于查询性能的优化方式有多种,下面列举几种:1)优化方式一:优化sql查询方式;如上表1所示的查询方式,其中,简单查询和关联查询本身即为非常简单的查询方式,用于查询一些基本的查询内容,例如,筛选excel表中的某一列,对excel表中的某两列中相同行的数值求和,因此,对简单查询和关联查询本身的优化空间有限。而关联查询和关联聚合查询则为较复杂的查询方式,对该两种查询方式的优化方式如下:在关联查询中,一种可实现的优化方式为,通过先过滤、再关联的方式对查询sql进行优化;另一种可实现的优化方式为,根据查询内容选择用in还是exists对查询sql进行优化;第三种可实现的优化方式为,通过cte表达式对查询sql进行优化;在关联聚合查询中,若某表中分组列是非空唯一列,则先关联聚合,再重新关联取得其他列,则查询性能可能会获得相当大提升;其中,如上所说的in(在…范围里)、exists(存在)、cte(commontableexpression,公用表达式)表达式等,皆是sql语言中可用于实现查询的语法元素。2)优化方式二:建立索引;sql数据库中的数据都是以列表的形式存储,一张列表里可能有数百万行数据,但对于大多数列,往往具有相同的数值,若为某列建立索引,就如同给字典建立目录,则该列的每个具体值对应于数百万行中的哪些行,就可以通过索引直接查出,从而“过滤”的性能会获得极大提升,同时,关联列上的索引,也会对“关联”有较大的优化效果,而分组列上的索引,也会对“分组”有较大的优化效果。比如,如下表2所示的一张列表:表2行号姓名年龄1甲182乙193丙304丁185戊186已26如下表3为通过对年龄作索引得到的列表示意图:表3年龄索引(行号)181、4、5192263304如上表3所示,当查询内容为查询表2中年龄为18岁的人员时,则可以直接隐藏表2中的第1行、第4行和第5行即可。当数据量较大且列上重复的数值较多时,通过对列表制作索引,可以有效提高查询性能。3)优化方式四:服务端配置优化;目前,有不少的服务端配置参数,会直接影响查询性能,示例性的,以postgresql为例,其中一个配置参数为work_mem,用于指示内部排序操作和hash(哈希)表在开始使用临时磁盘文件之前使用的内存数目,例如,缺省数值是1,则表示内部排序操作和hash(哈希)表在开始使用临时磁盘文件之前使用的内存数目为1兆字节(1mb),应理解的是,缺省数值越大,则内部排序性能也会更佳。所以,当查询涉及排序,可以是查询本身直接涉及排序,也可以是其他算子内含排序时,可以临时将影响查询性能的服务器配置参数进行调整,以此提升查询性能。其中,对于影响性能的服务器配置参数包括但不限于:上述缺省数值、enable_nestloop、enable_mergejoin。以上为较常见的优化查询性能的方式,实际上优化查询性能的方式还有多种,比如对一些较大的数据列表建立分区,使用临时列表等。目前,现有在优化查询性能时,只能对一些较为简单的查询内容所构建的sql进行优化,无法根据查询内容灵活适配优化方式,并且有时查询内容较为复杂时,对于开发人员来说,构建sql本身即存在难度,其优化方式往往仅能保证查询结果的正确性,无法达到有效优化。鉴于此,本申请实施例提供了一种数据查询的方式,针对用户输入的不同的查询内容包含的查询条件组成的查询条件集合与预设的查询条件集合进行匹配,再根据预设的查询条件结合和查询优化方案集合的对应关系确定匹配的查询条件集合对应的查询优化方案集合,根据确定的查询优化方案集合生成查询语句,并执行该查询语句,以从待查询数据中获取查询结果。本申请实施例会根据大量不同的查询条件集合适配对应的查询优化方案,最大程度上实现对查询性能的优化。下面结合说明书附图对本发明实施例做进一步详细描述。如图1所示,本发明实施例提供的是一种数据查询的方法,具体包括以下步骤:步骤s100:确定用户输入的查询内容包含的查询条件;步骤s101:根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;步骤s102:根据确定的所述查询优化方案集合生成查询语句;步骤s103:执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。通过上述方案,可以实现针对不同的查询内容能够灵活的适配最佳的查询优化方案,避免使用单一的优化工具使用单一的优化方式对不同的查询内容构建的查询语句进行统一的优化,本申请的查询优化方案是查询优化方式灵活,应用性较强。本申请实施例在获取到用户输入的查询内容时,首先对该查询内容进行解析,获取该查询内容包含的查询条件。比如,待查询数据为表4,该列表4为学生信息统计表,包含学生的年级、班级、姓名、年龄和地区等信息。年级班级姓名性别年龄身高(cm)体重(公斤)地区112刘洋女1716544河北213李雷男1817560山东311赵凡女2017255北京414薛凯男2417875厦门516郝宇男2218078大连………………………………………………假设用户输入的查询内容为筛选出表4中地区为北京且年龄为20岁的人员,则通过解析该查询内容,可得该查询内容包含的查询条件为两个过滤子条件,过滤子条件之间为且的关系,其过滤子条件1包含的具体对象为地区为北京,过滤子条件2包含的具体对象为年龄等于20。上述仅为举例,下面对本申请实施例中的查询条件进行介绍,其中,查询条件包括但不限于下列条件:1,输出列信息;对于输出列信息这一查询条件,具体分为下列三种类型:(1)直接输出列:直接输出某列中的某列,例如,tb4(表4).col2(第二列),即输出表4的第二列(2)聚合运算列:输出关于某表中某列的聚合运算结果,例如count(tb2.col2),即输出表2的第二列的和。(3)其他:如同一张列表或不同列表的多个列之间的运算,例如:tb4.col2+tb1.col2,即将表4的第二列和表4的第二列相同行的数值相加,或tb4.col2+tb2.col2,即将表4的第二列和表2的第二列相同行的数值相加。2,过滤条件;过滤条件,可以理解为对列表进行筛选,具体的,sql标准的过滤条件的类型包括但不限于下列条件:in、notin、like、notlike、>=<运算、isnull或isnotnull。下面通过表4对上述过滤条件的类型进行介绍:表4对于过滤条件,各个表之间相互独立,每个表自身可以有多个过滤条件,这些过滤条件可以是不同类型,且可以是一个或多个过滤类型的条件的组合,以组成不同的查询条件结合。如子条件1and子条件2,或者子条件1or子条件2,当有多个时可能会更复杂,例如:selectxxxfromtable1t1where(t1.col1in(1,2,3)ort1.col1>100)andt1.col2like‘abc%andt1.col3isnull3,按列进行分组;在统计分析场景中,往往都会有分组,以及基于分组的聚合运算。示例性的,结合表4,若将表4按照班级来划分则是对表4的一种分组方式,若将表4按照性别来划分则是对表4的另一种分组方式。上述为几种查询条件的介绍,上述查询条件可以组成不同的查询条件集合,例如,结合上述表4是例子,若用户输入的查询内容为查询班级号为1,身高超过160cm,或体重不超过60公斤的女生。上述查询内容包含的查询条件包括:分组、过滤和输出列信息;其中,将表4按照班级进行划分为分组条件,基于分组的结果筛选出女生且身高不超过160cm,或女生且体重不超过60公斤为过滤条件,该过滤条件又包含两个子条件,分别为子条件1,女生,子条件2身高不超过160cm或体重不超过60公斤。上述查询条件仅为举例,本申请实施例的查询条件不限于此,任何用户输入的查询内容能够解析处的查询条件都适应于本申请实施例,且该上述查询条件为对查询条件的几种类别的介绍,本申请查询条件还可以包含更加具体的内容,比如查询条件为通过两个子条件进行过滤,两个子条件的关系为且的关系。本申请实施例将一个或多个查询条件组合为一类查询条件集合,本申请实施例,根据各查询条件的组合确定各类查询条件集合,并确定不同查询条件集合适用的查询优化方案集合,该查询优化方案集合包含一个或多个查询优化方案,并预设各查询条件集合和查询优化方案集合的对应关系,根据用户输入的查询内容包含的查询条件匹配的查询条件集合,再根据预设的查询条件集合和查询优化方案集合的对应关系确定用户输入的查询内容匹配的查询条件集合对应的查询优化方案,并使用确定的查询优化方案生成查询语句,以实现根据不同的查询内容灵活适配对应的查询优化方案。本申请实施例中的查询优化方案有多种,下面通过具体描述对查询优化方案进行介绍:1,in优化;当查询涉及到多张表时,其查询条件为通过某表对另一个表作筛选时,对应的查询优化方案可以是in查询或exists查询。其中,in()适合b表比a表数据小的情况,exists()适合b表比a表数据大的情况。下面进行举例说明:select*fromawhereidin(selectidfromb)以上为使用了in的查询语句,in()只执行一次,其含义为查出b表中的所有id字段并缓存起来。之后,检查a表的id是否与b表中的id相等。如果相等,则将a表的记录加入结果集中,直到遍历完a表的所有记录。可以看出,当b表数据较大时不适合使用in(),因为它会b表数据全部遍历一次。因此,若查询条件是通过tbb对tba作筛选时,若tbb的数据量相比于tba的数据量较小时,则适应于in的查询方式,通过in的查询方式可以起到查询优化的作用。2,exists优化;同样的,下面对exists的查询方式进行举例说明:selecta.*fromaawhereexists(select1frombbwherea.id=b.id)以上查询使用了exists语句,exists()会执行a若干(length)次,且它并不缓存exists()结果集。因为exists()结果集的内容并不重要,重要的是结果集中是否有记录,如果有则返回true,没有则返回false。因此,当b表比a表数据大时适合使用exists(),因为它没有那么多的遍历操作,只需要再执行一次查询就行。因此,若查询条件是通过tbb对tba作筛选时,若tbb的数据量相比于tba的数据量较大时,则适应于exists的查询方式,通过exists的查询方式可以起到查询优化的作用。3,非空唯一优化;非空唯一列:当某表中,存在一列,同时存在非空约束(notnull)和唯一约束(unique)时,则该列可称为非空唯一列。当按某表的非空唯一列进行分组,且同时输出该表其他列信息时,在查询结果一致的前提下,sql存在两种构建方式,下面以a和b两张列表,a表是学生信息表,b表是课程信息表,a表和b表是针对相同的学生统计的不同的信息,a表中id、name、class、address分别表示学生的学号、姓名、班级、地址,b表中aid是学生学号,id是课程号为例,对将列表a和列表b按照非空唯一列进行分组时的sql的构建方式进行介绍说明:首先,对非空唯一列进行举例说明,非空唯一列是指列表中该列具有数值,且该列中的任一数值是唯一的,即不重复。例如,身份证,每个用户都具有身份证,且每个用户的身份证的编号不相同。又例如,a表中的id列为非空唯一列,即如果存在一个学生,那么他的学号肯定不能是未知的,也不可能存在两个学生的学号是相同的。示例性的,基于a表和b表,若查询需求为将各学生案序号分组,输出各学生所选课程号,同时输出该学生的学号对应的学生姓名和所在班级班级。如下表5为基于a表和b表得到的预期查询结果。学生学号(id)学生姓名(name)所在班级(class)所选课程号(address)100张三8013101李四80610102王五8026基于上述示例的查询场景得到预期查询结果,有多种实现方式,下面列举两种:方式一,低效方式:将其他列加入分组列中,从而同时输出,一种基于该方式构建的sql查询语句示例如下:selecta.id,a.name,a.class,a.address,count(b.id)ascnfromaajoinbbona.id=b.aidgroupbya.id,a.name,a.class,a.address需要说明的是,a.id含义为a表的id列,a.class含义为a表的class列,a.address含义为a表的address列,b.aid含义为b表的aid列,以此类推,重复之处不再赘述。方式二,高效方式:先只按照非空唯一列作分组,并作聚合运算,得到一个中间结果集后,再通过该非空唯一列重新关联该表取得其他列,一种基于该方式构建的sql查询语句示例如下:selectt.id,a.name,a.class,a.address,t.cnfrom(selecta.id,count(b.id)ascnfromaajoinbbona.id=b.aidgroupbya.id)tleftjoinaaont.id=a.id上述两种构建方式对查询性能的影响也存在较大差别,本申请实施例可以根据查询内容适配对应的非空唯一优化的构建方式,以优化查询性能。上述为本申请实施例提供的查询优化方案的举例,任何能够对查询性能进行优化的方案均适用于本申请实施例,并且本申请实施例中的查询优化方案集合包括但不限于上述一种或多种查询优化方案的组合。比如,查询条件集合为条件1:分组,和条件2:通过数据量较大tbb对数据量较小tba作筛选,该查询条件集合对应的查询优化方案集合包含的查询优化方案为非空唯一优化和exists优化。根据确定的查询优化方案集合生成查询语句,并执行生成的查询语句以从待查询数据中获取查询内容对应的查询结果。其中,在生成查询语句时,一种可选的方式为,确定每个查询优化方案集合对应的查询语句模板(例如sql语句模板),将查询内容包含的具体对象填入该查询内容对应的查询优化方案集合对应的sql语句模板中,以生成该查询内容对应sql语句;另一种可选的实现方式为,确定各查询优化方案对应的查询语句模板,将查询内容包含的具体对象填入该查询内容对应的查询优化方案对应的查询语句模板中,以生成该查询内容对应任一查询优化方案对应的查询语句。则在该生产方式下,再按照查询优化方案的优先级顺序执行生成的各查询优化方案对应的查询语句。例如:用户输入的查询内容对应的查询优化方案集合为非空唯一优化和exists优化,则按照用户输入的具体查询条件分别生成非空唯一优化对应的查询语句,以及exists优化对应的查询语句。按照exists优化和非空唯一优化的优先级确定exists优化和非空唯一优化的执行顺序,假设非空唯一优化的优先级高于exists优化,则先执行非空唯一优化对应的查询语句,再基于非空唯一优化对应的查询语句获取的查询接货执行exists优化对应的查询语句。优选的,在解析得到用户输入的查询内容包含的查询条件时,在执行生成查询语句之前,可以先对该查询条件的有效性进行判断,若该查询条件本身即为无效条件,则直接输入错误信息或警报信息,以通知用户输入的查询条件有误,请确定或请重新输入等内容。具体的,本申请实施例可以通过判断查询条件是否处于待查询数据的范围内来判断查询条件的有效性。示例性的,以结合上述表4,若用户输入的查询内容为查询表4中学生的血型(比如通过输入关键字“血型”进行筛选时),则解析该查询内容,确定该查询内容包含的查询条件为过滤,该过滤条件的对象为血型,具体的,在判断该查询条件的有效性时,判断表4包含的各列信息是否包含“血型”这一列信息,若不包含,则确定该查询条件无效,可选的,输出错误信息(或警告信息),以提示用户输入的查询内容有误。作为另一种示例,仍以表4为例,假设表4中各学生的年龄范围为18~30,应理解,上述年龄范围为通过表4中“年龄”这一列的最小值和最大值确定的。若用户输入的查询内容为查询表4中年龄为35岁的学生,该查询内容包含的查询条件为过滤条件,该过滤条件的对象为年龄等于35,则通过表4指示的各学生的年龄范围确定该用户输入的查询内容包含的查询条件有误,以提示用户输入的查询内容有误。在一种可选的的场景中,若用户输入的查询内容包含多个查询条件时,若其中1个查询条件不具有有效性,则其余查询条件可以不执行,直接输出错误信息(或警告信息)。当确定用户输入的查询内容包含的查询条件有效时,可以通过上述匹配查询条件集合的方式确定对应的查询优化方案集合,根据该确定的查询优化方案集合生成该查询内容对应的查询语句,并执行该查询语句以获取查询结果。作为另一种优化方式,当获取到查询结果之后,将查询内容包含的查询条件与对应的查询结果保存至历史查询记录中。当用户再次输入查询内容时,根据历史查询记录判断是否查询过相同的查询条件,比如历史查询记录中记录有:查询内容为偏旁部署为木字旁的汉字,以及对应的查询结果(偏旁部署为木的汉字),如“根、模、林”等。用户再次查询时,输入的查询内容为偏旁部署为木字旁且笔画为笔画为10的汉字,则针对该查询内容,显然通过历史查询记录来查询能够有效缩短查询时间。本申请实施例可以结合匹配查询条件集合和历史查询记录两种方式进行查询优化,下面举例说明:结合方式一:串行方式;串行方式为先判断历史查询记录内是否包含有查询内容包含的查询条件,如果有,基于历史查询记录获取查询结果,若没有,则通过匹配查询条件集合的方式获取查询结果。如图2所示,为串行方式进行查询的方法流程示意图,包括以下步骤:步骤s201,获取用户输入的查询内容步骤s202,解析用户输入的查询内容,得到查询内容包含的查询条件步骤s203,判断任一查询条件是否具有有效性,如果是,则执行步骤s204,否则,执行步骤206;步骤s204,判断历史查询记录是否包含任一查询条件,如果是,则执行步骤205,否则,执行步骤207;步骤s205,基于历史查询数据获取查询结果步骤s206,输出提示信息(错误信息或警报信息)步骤s207,根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合;步骤s208,根据确定的所述查询优化方案集合生成查询语句;步骤s209,执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。结合方式二:并行方式;并行方式为包括两个并行的进程,进程1为判断历史查询记录是否包含查询条件,进程2为执行通过匹配查询条件集合的方式获取查询结果,进程1和进程2可以同时执行,当进程1确定历史查询记录包含查询条件时,通知进程2结束处理,当进程1确定历史查询记录不包含查询条件时,则可以继续执行进程2以获取查询结果。在一种可能的场景中,通过并行方式能够避免判断历史查询记录是否包含查询条这一步骤造成的时延。如图3所示,为并方式进行查询的方法流程示意图,包括以下步骤步骤s301,获取用户输入的查询内容;步骤s302,解析用户输入的查询内容,得到查询内容包含的查询条件步骤s303,判断任一查询条件是否具有有效性,如果是,则同时执行步骤步骤s304和步骤s307;否则,执行步骤s310;步骤s304,判断历史查询记录是否包含查询条件,如果是,则执行步骤s305,否则,执行步骤s306;步骤s305,基于历史查询数据获取查询结果步骤s306,结束步骤s304-s306的进程步骤s307,根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合步骤s308,根据确定的所述查询优化方案集合生成查询语句步骤s309,执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。需要说明的是,步骤304确定历史查询记录包含用户输入的查询内容包含的查询条件时,则在执行步骤305的同时,通知结束步骤s307-s309对应的进程。本申请实施例优选通过结合方式二进行查询,当历史查询记录中不具有用户输入的查询内容包含的查询条件时,可以直接结束该进程,通过匹配查询条件集合的方式继续执行,避免等待判断的步骤造成的时延,提高查询性能。其中,在判断历史查询数据是否包含用户输入的查询内容包含的查询条件时,可能出现的情况有多种,再具体根据历史数据获取查询结果时,不同的情况对应的查询方式也有所不同,下面逐一进行具体说明:为了简化区分,下文将根据预设的查询条件集合与查询优化方案集合的对应关系确定查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案对应的查询优化方式称为第一查询优化方式,将通过历史查询数据获取查询结果的方式称为第二查询优化方式。情况1,历史查询数据不包含查询内容包含的任一查询条件;例如,用户输入的查询内容为查找偏旁部署为土,且笔画为8的所有汉字,而历史查询数据中既没有关于对偏旁部署为土的汉字的查询记录,也没有笔画为8的汉字的查询记录。因此,确定历史查询数据不包含该查询内容包含的任一查询条件。对于历史查询数据不包含所述查询内容包含的任一查询条件,则执行第一查询优化方式对应的方法流程的步骤。情况2,历史查询数据包含查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集;例如,用户输入的查询内容为查询声母为b或声母为c的汉字,而历史查询数据包含声母为b的查询条件对应的查询结果,也就是,历史查询数据包含查询内容包含的部分查询条件。进一步条件1,声母为b的汉字,和条件2,声母为c的汉字,之间没有交集,也就是,历史查询数据包含的查询内容包含的查询条件(条件1)与不包含的查询条件(条件2)之间没有交集,该情况下执行下面操作:针对条件1,针对历史查询数据包含查询内容包含的部分查询条件,从历史查询数据中获取所述历史数据包含的部分查询条件对应的查询结果。例如,从历史查询数据中获取声母为b的汉字的查询结果。针对条件2,将仅包含目标查询条件的查询条件集合作为与所述查询内容包含的查询条件匹配的查询条件集合;其中,目标查询条件为查询内容包含的且历史查询数据未包含的查询条件。例如,条件2(查询声母为c的汉字)这一查询条件所组成的集合作为匹配的查询条件集合,针对该匹配的查询条件集合对应的查询优化方案集合生成查询语句,从待查询数据中获取查询结果。将从待查询数据中获取的查询结果和从历史查询数据中获取的查询结果确定最终的查询结果。例如,将通过第一查询方式从待查询数据中获取的声母为c的汉字和从历史查询数据中获取的声母为b的汉字合并后输出。情况3,历史查询数据包含查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间有交集;例如,用户输入的查询内容为查询偏旁部署部首为金且声母为b的汉字,而历史查询数据中仅包含查询条件为声母为b的汉字,也就是,历史查询数据包含查询内容的部分查询条件。进一步,待查询的内容为声母为b的汉字中偏旁部首为金字旁的汉字,也就是,历史查询数据中包含的部分查询条件(声母为b的汉字)和未包含的部分查询条件(偏旁部署为金字旁)有交集,比如:钯、钡等。则对于该情况,获取历史查询数据包所述查询内容包含的部分查询条件对应的查询结果(声母为b的汉字);并针对未包含的部分查询条件(偏旁部署为金字旁)生成对应的复用查询语句;示例性的,上述流程具体为,从历史查询数据中获取声母为b的汉字,同时基于偏旁部署为金字旁的查询条件生成复用查询语句,假设从历史查询数据中获取的声母为b的汉字组成的数据列表为tb5(tb5可包含行号和声母为b的汉字),直行生成的复用查询语句从tb5中获取偏旁部署为金字旁的汉字。其中,复用查询语句也可以通过预设查询条件与对应的复用语句模型生成,比如针对简单查询,如上述的筛选条件,其复用查询语句可以为:select*from。将上述执行复用查询语句从获取的所述查询结果中获取历史查询数据中未包含的部分查询条件对应的查询结果作为最终的查询结果。情况4,历史查询条件中包含所述查询内容包含的所有查询条件若历史查询条件中包含查询内容包含的所有查询条件,则获取历史查询数据中查询内容对应的查询结果。例如,用户输入的查询内容为声母为b的汉字,而历史查询数据中包含查询条件为声母为b的汉字,也就是,历史查询数据中包含查询内容包含的查询条件,则从历史查询数据中获取查询内容对应的查询结果。如图4所示,为本发明实施例提供的一种基于用户态的文件访问控制装置,该装置包括:至少一个处理单元400以及至少一个存储单元401,其中,所述存储单元401存储有程序代码,当所述程序代码被所述处理单元400执行时,使得所述处理单元400执行下列过程:确定用户输入的查询内容包含的查询条件;根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;根据确定的所述查询优化方案集合生成查询语句;执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果。可选的,所述处理单元400具体用于:若所述查询优化方案集合包含至少两个查询优化方案,则根据查询优化方案的优先级确定针对所述查询内容进行查询时,各查询优化方案的执行顺序;按照所述查询优化方案的执行顺序生成所述查询语句。可选的,所述处理单元400具体用于通过下列方式确定与所述查询内容包含的查询条件匹配的查询条件集合:若历史查询数据未包含所述查询内容包含的任一查询条件,或所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则将仅包含目标查询条件的查询条件集合作为与所述查询内容包含的查询条件匹配的查询条件集合;其中,所述目标查询条件为查询内容包含的且历史查询数据未包含的查询条件。可选的,所述处理单元400还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则针对所述历史查询数据包含所述查询内容包含的部分查询条件,从历史查询数据中获取所述历史数据包含的部分查询条件对应的查询结果;所述从待查询数据中获取所述查询内容对应的查询结果之后,根据从所述待查询数据中获取的所述查询结果和从所述历史查询数据中获取的所述查询结果确定最终的查询结果。可选的,所述处理单元400还用于:若所述历史查询条件中包含所述查询内容包含的所有查询条件,则获取所述历史查询数据中所述查询内容对应的查询结果。可选的,所述处理单元400还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间有交集,则获取所述历史查询数据包所述查询内容包含的部分查询条件对应的查询结果;针对所述未包含的部分查询条件生成对应的复用查询语句;将执行所述复用查询语句从获取的所述查询结果中获取所述未包含的部分查询条件对应的查询结果作为最终的查询结果。可选的,所述执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果之后,所述处理单元400还用于:将所述目标查询条件与对应的查询结果添加至所述历史查询数据中。可选的,所述查询内容包含的查询条件处于待查询数据范围内。可选的,所述查询条件包括下列中的部分或全部:输出列表的列信息、列表过滤或对列表进行分组。可选的,所述查询优化方案包括下列中的部分或全部:in优化、exists优化或非空唯一优化。基于同一发明构思,本发明实施例中还提供了一种数据查询的装置,由于该装置解决问题的原理与本发明实施例进行数据查询的方式相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。如图5所示,为本发明实施例提供的一种数据查询的装置,该装置包括:第一确定模块500:用于确定用户输入的查询内容包含的查询条件;第二确定模块501:用于根据预设的查询条件集合与查询优化方案集合的对应关系,确定与所述查询内容包含的查询条件匹配的查询条件集合对应的查询优化方案集合,其中所述查询条件集合包括至少一个查询条件,所述查询优化方案集合包括至少一个查询优化方案;处理模块502:用于根据确定的所述查询优化方案集合生成查询语句;执行模块503:用于执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结。可选的,所述处理模块502具体用于:若所述查询优化方案集合包含至少两个查询优化方案,则根据查询优化方案的优先级确定针对所述查询内容进行查询时,各查询优化方案的执行顺序;按照所述查询优化方案的执行顺序生成所述查询语句。在一种可能的实现方式中,所述第二确定模块501用于通过下列方式确定与所述查询内容包含的查询条件匹配的查询条件集合:若历史查询数据未包含所述查询内容包含的任一查询条件,或所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则将仅包含目标查询条件的查询条件集合作为与所述查询内容包含的查询条件匹配的查询条件集合;其中,所述目标查询条件为查询内容包含的且历史查询数据未包含的查询条件。在一种可能的实现方式中,所述第二确定模块501还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间没有交集,则针对所述历史查询数据包含所述查询内容包含的部分查询条件,从历史查询数据中获取所述历史数据包含的部分查询条件对应的查询结果;所述从待查询数据中获取所述查询内容对应的查询结果之后,根据从所述待查询数据中获取的所述查询结果和从所述历史查询数据中获取的所述查询结果确定最终的查询结果。在一种可能的实现方式中,所述第二确定模块501还用于:若所述历史查询条件中包含所述查询内容包含的所有查询条件,则获取所述历史查询数据中所述查询内容对应的查询结果。在一种可能的实现方式中,所述第二确定模块501还用于:若所述历史查询数据包含所述查询内容包含的部分查询条件且包含的部分查询条件和未包含的部分查询条件之间有交集,则获取所述历史查询数据包所述查询内容包含的部分查询条件对应的查询结果;针对所述未包含的部分查询条件生成对应的复用查询语句;将执行所述复用查询语句从获取的所述查询结果中获取所述未包含的部分查询条件对应的查询结果作为最终的查询结果。在一种可能的实现方式中,所述执行生成的所述查询语句从待查询数据中获取所述查询内容对应的查询结果之后,所述执行模块503还用于:将所述目标查询条件与对应的查询结果添加至所述历史查询数据中。在一种可能的实现方式中,所述查询内容包含的查询条件处于待查询数据范围内。在一种可能的实现方式中,所述查询条件包括下列中的部分或全部:输出列表的列信息、列表过滤或对列表进行分组。在一种可能的实现方式中,所述查询优化方案包括下列中的部分或全部:in优化、exists优化或非空唯一优化。进一步地,本发明实施例还提供一种计算机可读非易失性存储介质,包括程序代码,当所述程序代码在计算装置上运行时,所述程序代码用于使所述计算装置执行本发明实施例数据查询方法的步骤。以上参照示出根据本申请实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或装置使用,或结合指令执行系统、装置或装置使用。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1