一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

结构化查询语句优化方法、装置、电子设备及介质与流程

2022-03-09 05:38:11 来源:中国专利 TAG:
1.本发明实施例涉及数据库
技术领域
:,尤其涉及一种结构化查询语句优化方法、装置、电子设备及介质。
背景技术
::2.结构化查询语句(structuredquerylanguage,sql),也可称为sql语句,是一种数据库查询和程序设计语言,也可以指一种关系数据库操作语言;其可用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。3.目前,在当前通用的数据库技术中,为了实现一个包含groupby子句的sql语句,其中,groupby子句,也可以称为分组子句,是指在sql语句中用于对数据进行分组处理的子句,需要将数据库的表中的数据取出来,按照groupby子句所指定的每个分组列来计算分组。但是,在某些情况下,实现一个包含groupby子句的sql语句无需用到groupby子句中的所有分组列,此时若还是按照groupby子句所指定的每个分组列来计算分组,就会增大计算量,从而降低sql语句的执行效率。4.故,如何提高sql语句的执行效率是当前亟待解决的技术问题。技术实现要素:5.本发明实施例提供了一种结构化查询语句优化方法、装置、电子设备及介质,以提高sql语句的执行效率。6.第一方面,本发明实施例提供了一种结构化查询语句优化方法,包括:7.对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;8.确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表,其中,所述目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,所述目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;9.根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列;10.根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;11.根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。12.第二方面,本发明实施例还提供了一种结构化查询语句优化装置,包括:13.创建模块,用于对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;14.第一确定模块,用于确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表,其中,所述目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,所述目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;15.第二确定模块,用于根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列;16.第三确定模块,用于根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;17.优化模块,用于根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。18.第三方面,本发明实施例还提供了一种电子设备,包括:19.一个或多个处理器;20.存储装置,用于存储一个或多个程序;21.所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明实施例提供的结构化查询语句优化方法。22.第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例提供的结构化查询语句优化方法。23.本发明实施例提供了一种结构化查询语句优化方法、装置、电子设备及介质,首先对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;其次确定分组子句中属于特征列的分组列,并将属于特征列的分组列中满足预设条件的目标分组列和目标分组列所属表添加至初始链表中,构建成目标链表,其中,目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;然后根据分组子句的所有分组列和对应的分组列所属表,以及目标链表,确定分组子句的所有分组列中的第一可标识分组列;之后根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列;最后根据第一可标识分组列和第二可标识分组列,优化目标结构化查询语句。利用上述技术方案,能够有效提高sql语句的执行效率。附图说明24.图1a为本发明实施例提供的一种sql语句a查询结果的示意图;25.图1b为本发明实施例提供的一种sql语句b查询结果的示意图;26.图2为本发明实施例一提供的一种结构化查询语句优化方法的流程示意图;27.图3为本发明实施例二提供的一种结构化查询语句优化装置的结构示意图;28.图4为本发明实施例三提供的一种电子设备的结构示意图。具体实施方式29.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。30.在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。31.本发明使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”。32.需要注意,本发明中提及的“第一”、“第二”等概念仅用于对相应内容进行区分,并非用于限定顺序或者相互依存关系。33.需要注意,本发明中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。34.结构化查询语句,即sql语句是一种重要且常用的关系数据库操作语言,groupby子句是sql语句标准中用于对数据进行分组处理的子句,可称为分组子句。35.以下对groupby子句进行示例性说明。36.假设测试表(即test表)中包含两列,列名分别是c1、c2,利用sql语句a查询test表中数据,sql语句a可表示为:selectc1,c2fromtest。图1a为本发明实施例提供的一种sql语句a查询结果的示意图。37.利用包含groupby子句(即分组子句)的sql语句b查询test表中的数据,sql语句b可表示为:selectc1,c2fromtestgroupbyc1,c2。其中,sql语句b中分组子句所包含的分组列分别为c1和c2,进行sql语句b的分组计算时,要求每组中的c1和c2必须分别相同。图1b为本发明实施例提供的一种sql语句b查询结果的示意图。如图1b所示,1和a是一组,1和b是一组,2和c是一组,3和c是一组,一共4组;在此基础上,如图1b所示,利用包含groupby子句的sql语句b的查询结果显示了上述四组查询结果。38.本发明实施例提出了一种通过只计算特定分组列的方式以提升sql语句执行效率的方法,对于一条包含多个分组列的sql语句,若该多个分组列属于不同的表,并且其中某个分组列a能够唯一标识其他分组列,则可以直接使用该分组列a来代替其他能够被分组列a标识的分组列来进行分组,在此基础上,通过减少分组列个数的计算,可以提高sql语句的执行效率。39.在一实施例中,假设用于记录用户信息的表为customer表,创建customer表的sql语句可表示为:40.createtablecustomer(idintprimarykey,namevarchar(20),41.nation_idint);42.其中,标识(identification,id)可表示用户的身份id,name可表示用户姓名,nation_id可表示用户所属的国家id。其中id为customer表的主键(即primarykey),主键值(即id所在列的值)不能重复且不能为空;varchar(20)可表示用于表征name的字符不可超过20个字符。43.customer表中的数据(id,'name',nation_id)可以包括:44.(1,'王先生',1),(2,'李小姐',1),以及(3,'赵先生',2)。45.假设用于记录国家信息的表为nation表,创建nation表的sql语句可表示为:46.createtablenation(nation_idintprimarykey,nation_namevarchar(20));47.其中,nation_id可表示国家id,nation_name可表示国家名称。其中nation_id为nation表的主键,主键值(即nation_id所在列的值)不能重复且不能为空。48.nation表的数据(nation_id,'nation_name')可以包括(1,'中国'),(2,'美国')。49.在上述实施例的基础上,查询满足查询条件(即customer.nation_id=nation.nation_id)的用户id及其所属国家名称的sql语句c可表示为:50.selectid,nation_namefromcustomer,nationwherecustomer.nation_id51.=nation.nation_idgroupbyid,nation_name;52.sql语句c的查询结果可表示为(1,'中国'),(2,'中国')和(3,'美国')。53.sql语句c的分组列为id和nation_name,它们分别属于customer表和nation表,其中customer表和nation表之间的关联条件可表示为“customer.nation_id=nation.nation_id”。由于在customer表中可以根据id唯一确定一个nation_id,在nation表中可以根据nation_id唯一确定一个nation_name,在此基础上,根据customer表和nation表之间的关联条件,可以根据id唯一确定一个nation_name。例如id为1的用户,其所属国家名称为“中国”。54.因此,在sql语句c实际进行分组计算时,可以仅按照id分组,无需对nation_name进行分组。通过减少分组列个数,可以减少分组计算时所计算和比较的数据。当涉及到的数据量比较大或者能减少的分组列较多时,减少计算和比较的数据可以有效提高sql语句的执行效率。55.需要说明的是,在本实施例中,可以根据id唯一确定一个nation_name,但无法根据nation_name唯一确定一个id,例如无法确定“中国”对应的id是1还是2,因此在实际进行分组计算时可以忽略的分组列为nation_name。也就是说,若有两个分组列,其中一个分组列a可唯一确定另外一个分组列b,则在实际进行分组计算时可以忽略分组列b。56.实施例一57.图2为本发明实施例一提供的一种结构化查询语句优化方法的流程示意图,该方法可适用于对分组子句中包含多个分组列的结构化查询语句进行优化,以提高语句执行效率的情况,该方法可以由结构化查询语句优化方法装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在电子设备上,在本实施例中电子设备包括但不限于:台式计算机、笔记本电脑和服务器等设备。58.如图2所示,本发明实施例一提供的一种结构化查询语句优化方法,该方法包括如下步骤:59.s110、对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表。60.在本实施例中,结构化查询语句可以称为sql语句。链表可以指一种物理存储单元上非连续、非顺序的存储结构,链表可以由一系列节点(链表中每一个元素可称为一个节点)组成。61.对于包含分组子句的目标sql语句,若分组子句中包含多个分组列(如至少两个分组列),则可以创建初始链表。初始链表可以理解为一个初始的链表结构,其中还未增添节点,待在后续过程中需要增添节点时进行相应的增添,以用于存储相应的数据。62.可选的,对于分组子句中包含多个分组列的目标sql语句,创建初始链表,包括:对所获取的sql语句进行词法分析和语法分析,得到目标sql语句;判断目标sql语句中是否包含分组子句;若不包含分组子句,则退出优化;若包含分组子句,则判断分组子句是否存在外连接;若存在外连接,则退出优化;若不存在外连接,则判断分组子句中的分组列个数是否大于1;若分组列个数不大于1,则退出优化;若分组列个数大于1,则创建初始链表。63.其中,所获取的sql语句可以理解为用户所输入的待执行的sql语句。外连接可以指分组子句中的分组列所属的表之间的一种连接关系。64.具体的,首先可以通过相应的词法分析工具和语法分析工具对所获取的sql语句进行词法分析和语法分析,可以生成sql语句的内存结构语句(与数据库内存结构相应的内存结构语句),即目标sql语句。在得到目标sql语句之后,判断目标sql语句中是否包含分组子句,若目标sql语句中不包含分组子句,则退出优化,其中退出优化可理解为退出对目标sql语句的优化,正常执行所获取的sql语句;若目标sql语句中包含分组子句,则可以判断分组子句中是否存在外连接。若分组子句中存在外连接,则退出优化;若分组子句中不存在外连接,则可以判断分组子句中的分组列个数是否大于1;若分组子句中的分组列个数不大于1,则可以退出优化;若分组子句中的分组列个数大于1(如两个或两个以上),则可以创建初始链表。65.s120、确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表。66.在本实施例中,数据库中的数据可以以表的形式表示,一个表中可以包括多列数据。若一个表中的非空列带有唯一约束(即unique约束),或者该非空列为主键,则可以认为该非空列是其所属表的特征列。一个表中可以包括多个特征列。67.在利用初始链表构建目标链表的过程中,一个表只能有一个特征列存储在所构建的目标链表中。在此基础上,预设条件可以指在利用初始链表构成目标链表的过程中,对于属于特征列的分组列,其所属的表未存在于当前初始链表中。例如,若某个属于特征列的分组列a,其所属的表a已存在于当前初始链表中,则可以表明在此之前,表a中的某个属于特征列的分组列b已经存储在初始链表中,此时,根据上述中一个表只能有一个特征列存储在所构建的目标链表中的原则,分组列a就不能添加至当前初始链表中,即分组列a不满足预设条件。68.目标分组列可以指在多个属于特征列的分组列中,满足预设条件的分组列。目标分组列所属表可以指目标分组列所归属的表,如在上述实施例中,若id是一个目标分组列,则id所属表可以为customer表。69.具体的,首先确定分组子句中属于特征列的分组列(如为多个),然后针对于该多个属于特征列的分组列,可以按顺序逐一判定其是否满足预设条件,若存在一个分组列满足预设条件,则可以将满足预设条件的分组列作为目标分组列,并在初始链表中新增一个节点,将目标分组列和目标分组列所属表添加至该新增的节点中。其中,一个节点中可以包括一个目标分组列和对应的目标分组列所属表。当将所有的属于特征列的分组列判断完之后,当前初始链表在这个过程中已经包含了相应的节点和节点中所包含的相应数据,即当前初始链表可以作为目标链表。70.其中,目标链表中的每个节点可以用于存储一个目标分组列和对应的目标分组列所属表,目标链表的每个节点中还可以包括一个与相应的目标分组列所对应的权重标记值。其中权重标记值可以指用于表征其对应目标分组列的标识情况的值。示例性的,目标分组列的标识情况可以包括三种:第一种是目标分组列不可唯一标识其他目标分组列,也不可被其他目标分组列唯一标识;第二种是目标分组列可唯一标识其他目标分组列;第三种是目标分组列可被其他目标分组列唯一标识。例如,目标分组列a可被目标分组列b唯一标识,可理解为目标分组列a可被目标分组列b替换掉,目标分组列a可忽略。71.需要说明的是,一个分组列可唯一标识一个或多个其他分组列。在目标链表中的每个目标分组列均可唯一标识各自所属表中的其他分组列。72.在一实施例中,假设存在两个分组列a1和分组列b1,分组列a1对应的所属表可记为表m,且分组列a1是表m的特征列,分组列b1所对应的所属表可记为表n。当表m和表n之间的关系满足“m.a2=n.b2且分组列b2是表n的特征列”(其中,a2可以是表m中的任意列,b2可以是表n中的任意特征列)条件时,则可以认为分组列a1可唯一标识分组列b1。73.可选的,确定分组子句中属于特征列的分组列,并将属于特征列的分组列中满足预设条件的目标分组列和目标分组列所属表添加至初始链表中,构建成目标链表,包括:遍历分组子句中的每个分组列,判断当前分组列是否为自身所属表的特征列;若当前分组列为自身所属表的特征列,则遍历当前初始链表中的每个节点,判断当前初始链表中是否包含当前分组列所属表;若当前初始链表中不包含当前分组列所属表,则将当前分组列作为目标分组列,并将目标分组列和目标分组列所属表添加至当前初始链表的新增节点中;将遍历结束时的当前初始链表作为目标链表。74.其中,首先,遍历分组子句中的每个分组列,判断当前分组列是否为自身所属表的特征列;若当前分组列为自身所属表的特征列,则遍历当前初始链表中的每个节点(此时由于在之前的遍历过程中,可能已经有符合预设条件的目标分组列和目标分组列所属表被添加至初始链表的新增节点中,故当前的初始链表中可能已经包含了节点),判断当前初始链表中是否包含当前分组列所属表。然后,若当前初始链表中不包含当前分组列所属表,则可以将当前分组列作为目标分组列,并将目标分组列和目标分组列所属表添加至当前初始链表的一个新增节点中。最后,当遍历结束时,可以表明利用初始链表构建目标链表的过程结束,此时可以将当前初始链表作为目标链表。75.s130、根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列。76.在本实施例中,第一可标识分组列可以指在分组子句的所有分组列中,可被目标链表中的某个目标分组列唯一标识的分组列。77.示例性的,分组子句中可能会存在部分分组列及其所属表未被添加至目标链表中。因此,可以根据已构建的目标链表,从分组子句中找出未被添加至目标链表中的分组列所属表以及其上的分组列,并将所属表未被添加至目标链表中的分组列称为第一待标识分组列。在此基础上,针对于所查找出的多个第一待标识分组列,可依次从目标链表中查找是否存在可唯一标识第一待标识分组列的目标分组列,若存在,可将对应的第一待标识分组列作为第一可标识分组列。78.可选的,根据分组子句的所有分组列和对应的分组列所属表,以及目标链表,确定分组子句的所有分组列中的第一可标识分组列,包括:遍历分组子句中的每个分组列,判断目标链表中是否包含当前分组列所属表;若目标链表中不包含当前分组列所属表,则遍历目标链表中所包含的每个目标分组列,以判断目标链表中是否包含可唯一标识当前分组列的目标分组列;若是,则确定当前分组列为第一可标识分组列。79.其中,根据分组子句的所有分组列和对应的分组列所属表,以及目标链表,确定分组子句的所有分组列中的第一可标识分组列的具体过程为:首先,遍历分组子句中的每个分组列,判断目标链表中是否包含当前分组列所属表。然后,若目标链表中不包含当前分组列所属表,则可表明当前分组列为第一待标识分组列,此时可以遍历目标链表中所包含的每个目标分组列,以判断目标链表中是否包含可唯一标识当前分组列的目标分组列。最后,若目标链表中包含可唯一标识当前分组列的目标分组列,则可以确定当前分组列为第一可标识分组列。80.s140、根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列。81.在本实施例中,根据上述实施例中的权重标记值所表征的三种标识情况,可以对应设定三种权重标记值,如0,1和2。其中,权重标记值为0对应第一种标识情况;权重标记值为1对应第二种标识情况;权重标记值为2对应第三种标识情况。82.可选的,权重标记值包括第一设定值、第二设定值和第三设定值;当权重标记值为第一设定值时,对应的目标分组列不唯一标识其他目标分组列,也不被其他目标分组列唯一标识;当权重标记值为第二设定值时,对应的目标分组列可唯一标识一个或多个其他目标分组列;当权重标记值为第三设定值时,对应的目标分组列被一个或多个其他目标分组列唯一标识。83.其中,第一设定值、第二设定值和第三设定值可以分别设置为0,1和2。具体的,当权重标记值为第一设定值(即0)时,其对应的目标分组列不可唯一标识其他目标分组列(其他目标分组列可以指在目标链表中,除该目标分组列之外的其他目标分组列),也不被其他目标分组列唯一标识。当权重标记值为第二设定值(即1)时,对应的目标分组列可唯一标识一个或多个其他目标分组列。当权重标记值为第三设定值(即2)时,对应的目标分组列可被一个或多个其他目标分组列唯一标识。84.需要说明的是,目标分组列在唯一标识其他目标分组列的时候,也可以被其他目标分组列唯一标识。其中,若一个目标分组列与另一个目标分组列之间可以互相唯一标识对方,则可以任取其中一个目标分组列,将其对应的权重标记值设置为1,并将另一个目标分组列对应的权重标记值设置为2。85.可选的,目标链表的每个节点中还包括一个与相应的目标分组列所对应的替换表;在根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列之前,还包括:初始化目标链表中每个节点所对应的权重标记值为第一设定值;初始化目标链表中每个节点所对应的替换表为空。86.其中,替换表可以指可以唯一标识当前目标分组列的目标分组列所属表。目标分组列所对应的替换表可根据所对应的权重标记值确定。示例性的,当目标分组列a所对应的权重标记值为0时,其所对应的替换表为空;当目标分组列a可唯一标识某个目标分组列b时(即目标分组列a所对应的权重标记值为1时),其所对应的替换表为自身所属表,即目标分组列a所属表;当目标分组列a被某个目标分组列b唯一标识时(即目标分组列a所对应的权重标记值为2时),其所对应的替换表为目标分组列b所属表。87.示例性的,在根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列之前,可以初始化目标链表中每个节点所对应的权重标记值为第一设定值,即为0,并初始化目标链表中每个节点所对应的替换表为空(替换表为空可以理解为当前替换表是空数据,等待后续过程中相应的添加)。88.根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列,具体可以为:根据目标链表中每个节点所对应的权重标记值,针对于目标链表中任意两个节点所对应的目标分组列,确定是否存在唯一标识情况,如是否存在某个目标分组列可唯一标识另一个目标分组列;若存在,则可将对应的被唯一标识目标分组列确定为第二可标识分组列,并根据该两个节点所对应的权重标记值,重新设置该两个节点所分别对应的权重标记值和替换表。在此基础上,将目标链表中所有被确定为被唯一标识目标分组列的目标分组列作为第二可标识分组列。89.s150、根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。90.在本实施例中,在执行目标sql语句进行实际分组计算时,可以将分组子句中被确定为第一可标识分组列和第二可标识分组列的分组列忽略掉,仅基于除第一可标识分组列和第二可标识分组列之外剩余的分组列进行目标sql语句的执行,以减小分组列个数,实现目标sql语句的优化,从而提高目标sql语句的执行效率。91.本发明实施例一提供的一种结构化查询语句优化方法,首先对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;其次确定分组子句中属于特征列的分组列,并将属于特征列的分组列中满足预设条件的目标分组列和目标分组列所属表添加至初始链表中,构建成目标链表,其中,目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;然后根据分组子句的所有分组列和对应的分组列所属表,以及目标链表,确定分组子句的所有分组列中的第一可标识分组列;之后根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列;最后根据第一可标识分组列和第二可标识分组列,优化目标结构化查询语句。利用上述方法,能够有效提高sql语句的执行效率。92.可选的,根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列,包括:选取目标链表中任意两个不同的节点,判断其中一个节点中的目标分组列是否可唯一标识另一个节点中的目标分组列;若是,则将所述其中一个节点记为第一节点,将所述另一个节点记为第二节点,并根据第一节点和第二节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列;若否,则返回执行选取目标链表中任意两个不同的节点的操作,直至目标链表中不存在两个未被同时选取的节点,其中,每次选取的节点中至少有一个节点不同。93.在本实施例中,根据第一节点和第二节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列的具体过程为:94.首先选取目标链表中任意两个不同的节点,判断其中一个节点中的目标分组列是否可唯一标识另一个节点中的目标分组列;若其中一个节点中的目标分组列可唯一标识另一个节点中的目标分组列,则可将所述其中一个节点记为第一节点,将所述另一个节点记为第二节点,并可分别根据第一节点和第二节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列;若两个节点均不能唯一标识对方,则返回执行选取目标链表中任意两个不同的节点的操作,直至目标链表中不存在两个未被同时选取的节点,其中,每次选取的节点中至少有一个节点不同,以保证对目标链表中的任意两两节点之间均进行了上述判断操作。95.可选的,根据第一节点和第二节点所分别对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列,包括:若第一节点所对应的权重标记值为第一设定值且第二节点所对应的权重标记值为第一设定值或第二设定值,则分别设置第一节点和第二节点所对应的权重标记值为第二设定值和第三设定值,将第一节点和第二节点所对应的替换表设置为第一节点的目标分组列所属表;若第一节点所对应的权重标记值为第二设定值或第三设定值,且第二节点所对应的权重标记值为第一设定值,则设置第二节点所对应的权重标记值为第三设定值,将第二节点所对应的替换表设置为第一节点所对应的替换表;若第一节点所对应的权重标记值为第二设定值,且第二节点所对应的权重标记值为第二设定值,则设置第二节点所对应的权重标记值为第三设定值,将第二节点所对应的替换表设置为第一节点所对应的替换表;若第一节点所对应的权重标记值为第三设定值,且第二节点所对应的权重标记值为第二设定值,则判断第一节点所对应的替换表是否为第二节点中的目标分组列所属表;若是,则保持第一节点和第二节点中的权重标记值和替换表的当前设置不变;若否,则设置第二节点所对应的权重标记值为第三设定值,将第二节点所对应的替换表设置为第一节点所对应的替换表;若第二节点所对应的权重标记值为第三设定值,则保持第二节点中权重标记值和替换表的当前设置不变;在将目标链表中每个节点所对应的权重标记值和替换表设置完成后,将目标链表中权重标记值为第三设定值的节点中的目标分组列确定为第二可标识分组列。96.在上述实施例的基础上,当第一节点中的目标分组列可唯一标识第二节点中的目标分组列时,可根据第一节点和第二节点所分别对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列。97.具体的,若第一节点所对应的权重标记值为0且第二节点所对应的权重标记值为0或1,则可以分别设置第一节点和第二节点所对应的权重标记值为1和2,将第一节点和第二节点所对应的替换表设置为第一节点的目标分组列所属表。98.若第一节点所对应的权重标记值为1或2,且第二节点所对应的权重标记值为0,则此时第一节点所对应的权重标记值和替换表保持不变,可以仅设置第二节点所对应的权重标记值为2,将第二节点所对应的替换表设置为第一节点所对应的替换表;99.若第一节点所对应的权重标记值为1,且第二节点所对应的权重标记值为1,则可以确定第二节点中的目标分组列为第二可标识分组列,此时第一节点所对应的权重标记值和替换表保持不变,仅设置第二节点所对应的权重标记值为2,将第二节点所对应的替换表设置为第一节点所对应的替换表;100.若第一节点所对应的权重标记值为2,且第二节点所对应的权重标记值为1,则可以判断第一节点所对应的替换表是否为第二节点中的目标分组列所属表;若是,则可以保持第一节点和第二节点中的权重标记值和替换表的当前设置不变;若否,则可以设置第二节点所对应的权重标记值为2,将第二节点所对应的替换表设置为第一节点所对应的替换表;101.若第二节点所对应的权重标记值为2,无论第一节点所对应的权重标记值为何值,则可以保持第一节点和第二节点中权重标记值和替换表的当前设置不变;102.在利用上述设置方法将目标链表中每个节点所对应的权重标记值和替换表设置完成后,可将目标链表中权重标记值为2的节点中的目标分组列确定为第二可标识分组列。103.可选的,在第二节点所对应的权重标记值为第二设定值的情况下,根据第一节点和第二节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列,还包括:在设置第一节点和第二节点所对应的权重标记值和替换表之前,将目标链表中指定节点的替换表设置为第一节点所对应的替换表,其中,指定节点包括替换表为第二节点的替换表的节点。104.其中,在第二节点所对应的权重标记值为2的情况下,在设置第一节点和第二节点所对应的权重标记值和替换表之前,还可以将目标链表中,替换表为第二节点的替换表的节点所对应的替换表设置为第一节点所对应的替换表。105.在一个实施例中,一种结构化查询语句优化方法的具体实现过程如下:106.步骤1、对用户输入的sql语句进行词法和语法分析后生成sql的内存结构语句(即目标sql语句)。107.步骤2、判断目标sql语句中是否包含groupby子句(即分组子句),若没有则进执行步骤13;否则判断目标sql语句的分组子句是否存在外连接。若存在外连接则执行步骤13;若不存在外连接则判断分组子句中分组列的个数,若分组列的个数小于等于1,则执行步骤13;若分组列的个数大于1,则执行步骤3;108.步骤3、创建一个初始链表lst,继续执行步骤4;109.步骤4、遍历分组子句中每一个分组列,判断当前分组列col是否为其所属表t的特征列,若是则执行步骤5;若不是则取下一个分组列,继续执行步骤4。步骤4的遍历结束之后,将遍历结束时的当前初始链表作为目标链表lst,然后执行步骤6;110.步骤5、遍历当前初始链表lst,判断当前分组列col的所属表t是否已经存在于当前初始链表lst中,若不存在,则在当前初始链表lst上新增一个节点,用于记录当前分组列col及其所属表t,继续执行步骤4;111.步骤6、遍历分组子句中的每个分组列,判断当前分组列col的所属表t是否存在于目标链表lst中,若存在则取下一个分组列,继续返回执行步骤6的遍历分组子句中的每个分组列的操作;否则执行步骤7。当步骤6的遍历结束之后,则执行步骤8。112.需要说明的是,目标链表lst中的目标分组列均能唯一标识各自所属表的其他分组列。113.步骤7、遍历目标链表lst,判断目标链表lst中是否存在某个节点的目标分组列能唯一标识当前分组列col,若目标链表lst上存在某个节点的目标分组列能唯一标识当前分组列col,则标记当前分组列col能够在实际进行分组计算时被忽略。继续返回执行步骤6的遍历分组子句中的每个分组列的操作。114.需要说明的是,分析目标链表lst上的每个节点所记录的目标分组列所属表与当前分组列所属表之间的关系,记目标链表lst上节点记录的目标分组列及其所属表分别为c1和a,记当前分组列及其所属表分别为d1和b,如果两表之间存在关系“a.c2=b.d2且当前分组列d2是表b的特征列(其中,c2可以是表a中的任意列,d2可以是表b中的任意特征列)”,则认为目标链表lst上该节点的目标分组列c1能唯一标识当前分组列col,即d1。115.步骤8、将目标链表lst上每个节点所对应的权重标记值(权重标记值可用flag表示)都初始化为0,并将每个节点所对应的替换表(替换表可用tab表示)都初始化为空。在此基础上,开始遍历目标链表lst中的每一个节点,记录当前遍历到的节点为节点c,执行步骤9。步骤8的遍历结束之后,则执行步骤12。116.步骤9、遍历目标链表lst中的每一个节点,记录当前遍历到的节点为节点d,若节点c和节点d相同,则继续返回执行步骤9的遍历目标链表lst中的每一个节点的操作。若节点c和节点d不相同,则执行步骤10。步骤9的遍历结束之后,则继续返回执行步骤8的遍历;117.步骤10、判断节点c的分组列是否能唯一标识节点d的分组列,若不能,则返回继续执行步骤9的遍历目标链表lst中的每一个节点的操作;否则,执行步骤11。118.步骤11、判断节点c的权重标记值flag_c和节点d的权重标记值flag_d的值,可分为以下7种情况:119.a)若flag_c和flag_d都为0,则可置flag_c为1,flag_d为2,同时置节点c的替换表tab_c为节点c的目标分组列所属表c,置节点d的替换表tab_d为节点c的目标分组列所属表c;120.b)若flag_c为1且falg_d为0,则可置flag_d为2,同时置节点d的替换表tab_d为节点c所对应的替换表tab_c;121.c)若flag_c为2且flag_d为0,则可置flag_d为2,同时置节点d的替换表tab_d为tab_c(tab_c为节点c所对应的替换表);122.d)若flag_c为0且flag_d为1,则可置flag_c为1,置flag_d为2,同时置节点c的替换表tab_c为节点c的目标分组列所属表c,节点d的替换表tab_d为节点c的目标分组列所属表c;此外,还可遍历目标链表lst,若存在节点所记录的替换表为节点d所对应的替换表tab_d,则可置该节点的替换表为节点c的目标分组列所属表c;123.e)若flag_c为1且flag_d为1,则可置flag_d为2,节点d的替换表tab_d为表c,此外,遍历链表lst,若存在节点记录的替换表为表d,则置该节点的替换表为节点c所对应的替换表tab_c;124.f)若flag_c为2且flag_d为1,则判断tab_c是否为表d,若是,则保持flag_c、flag_d、tab_c以及tab_d不变;若否,则可置flag_d为2,节点d的替换表tab_d为节点c所对应的替换表tab_c,此外,还可遍历目标链表lst,若存在节点记录的替换表为节点d所对应的替换表tab_d,则可置该节点的替换表为节点c所对应的替换表tab_c;125.g)若flag_d为2,可表示flag_d对应的节点d中的目标分组列已经被其他节点中的目标分组列唯一标识过,无需处理。继续返回执行步骤9的遍历目标链表lst中的每一个节点的操作。126.步骤12、遍历目标链表lst,针对于所有权重标记值为2的节点,标记该节点的目标分组列能够在实际进行分组计算时将被忽略,继续执行步骤13;127.步骤13、优化结束(即对目标sql语句的优化结束)。128.需要说明的是,目标sql语句中的select项中可能包含分组列,因此不能直接将可以被忽略的分组列直接从目标sql语句中移除,可以在实际分组计算时,忽略该分组列。129.在上述实施例的基础上,步骤4和步骤5的目的是找出分组子句所包含分组列中的特征列,并加入到初始链表lst中,以构建成目标链表lst。其中,每个表(该表可理解为分组列所属表)最多有一个特征列在目标链表lst中。步骤6和步骤7可以通过分析表与表之间的关系,找出目标链表lst未记录的所有表中的分组列中,能被目标链表lst中的特征列(即目标分组列)标识的分组列。步骤8、步骤9、步骤10和步骤11可以通过分析表与表之间的关系,找出目标链表lst已记录的所有表中,能被其他目标分组列标识的目标分组列,并根据权重标记值flag和替换表tab简化各目标分组列间的关系。130.实施例二131.图3为本发明实施例二提供的一种结构化查询语句优化装置的结构示意图,该装置可由软件和/或硬件实现。如图3所示,该装置包括:创建模块310、第一确定模块320、第二确定模块330、第三确定模块340以及优化模块350;132.其中,创建模块310,用于对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;133.第一确定模块320,用于确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表,其中,所述目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,所述目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;134.第二确定模块330,用于根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列;135.第三确定模块340,用于根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;136.优化模块350,用于根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。137.在本实施例中,该装置首先通过创建模块,对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;其次通过第一确定模块,确定分组子句中属于特征列的分组列,并将属于特征列的分组列中满足预设条件的目标分组列和目标分组列所属表添加至初始链表中,构建成目标链表,其中,目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;然后通过第二确定模块,根据分组子句的所有分组列和对应的分组列所属表,以及目标链表,确定分组子句的所有分组列中的第一可标识分组列;之后通过第三确定模块,根据目标链表中每个节点所对应的权重标记值,确定目标链表所包含的目标分组列中的第二可标识分组列;最后通过优化模块,根据第一可标识分组列和第二可标识分组列,优化目标结构化查询语句。利用该装置,能够有效提高sql语句的执行效率。138.可选的,创建模块310,具体包括:139.分析单元,用于对所获取的结构化查询语句进行词法分析和语法分析,得到目标结构化查询语句;140.分组子句判断单元,用于判断所述目标结构化查询语句中是否包含分组子句;141.第一退出单元,用于若不包含分组子句,则退出优化;142.外连接判断单元,用于若包含分组子句,则判断所述分组子句是否存在外连接;143.第二退出单元,用于若存在外连接,则退出优化;144.分组列个数判断单元,用于若不存在外连接,则判断所述分组子句中的分组列个数是否大于1;145.第三退出单元,用于若所述分组列个数不大于1,则退出优化;146.创建单元,用于若所述分组列个数大于1,则创建初始链表。147.可选的,第一确定模块320,具体包括:148.特征列判断单元,用于遍历所述分组子句中的每个分组列,判断当前分组列是否为自身所属表的特征列;149.第一所属表判断单元,用于若当前分组列为自身所属表的特征列,则遍历当前初始链表中的每个节点,判断所述当前初始链表中是否包含当前分组列所属表;150.添加单元,用于若所述当前初始链表中不包含当前分组列所属表,则将当前分组列作为目标分组列,并将所述目标分组列和所述目标分组列所属表添加至所述当前初始链表的新增节点中;151.目标链表确定单元,用于将遍历结束时的当前初始链表作为所述目标链表。152.可选的,第二确定模块330,具体包括:153.第二所属表判断单元,用于遍历所述分组子句中的每个分组列,判断所述目标链表中是否包含当前分组列所属表;154.第一标识判断单元,用于若所述目标链表中不包含当前分组列所属表,则遍历所述目标链表中所包含的每个目标分组列,以判断所述目标链表中是否包含可唯一标识当前分组列的目标分组列;155.第一确定单元,用于若是,则确定当前分组列为第一可标识分组列。156.可选的,所述权重标记值包括第一设定值、第二设定值和第三设定值;当权重标记值为第一设定值时,对应的目标分组列不唯一标识其他目标分组列,也不被所述其他目标分组列唯一标识;当权重标记值为第二设定值时,对应的目标分组列可唯一标识一个或多个其他目标分组列;当权重标记值为第三设定值时,对应的目标分组列被一个或多个其他目标分组列唯一标识。157.可选的,所述目标链表的每个节点中还包括一个与相应的目标分组列所对应的替换表;158.在上述实施例的基础上,所述装置还包括:159.第一初始化模块,用于在根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列之前,初始化所述目标链表中每个节点所对应的权重标记值为第一设定值;160.第二初始化模块,用于初始化所述目标链表中每个节点所对应的替换表为空。161.可选的,第三确定模块340,具体包括:162.选取单元,用于选取所述目标链表中任意两个不同的节点,判断其中一个节点中的目标分组列是否可唯一标识另一个节点中的目标分组列;163.第二确定单元,用于若是,则将所述其中一个节点记为第一节点,将所述另一个节点记为第二节点,并根据所述第一节点和所述第二节点所分别对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;164.返回单元,用于若否,则返回执行选取所述目标链表中任意两个不同的节点的操作,直至所述目标链表中不存在两个未被同时选取的节点,其中,每次选取的节点中至少有一个节点不同。165.可选的,第二确定单元,具体包括:166.第一设置子单元,用于若第一节点所对应的权重标记值为第一设定值且第二节点所对应的权重标记值为第一设定值或第二设定值,则分别设置第一节点和第二节点所对应的权重标记值为第二设定值和第三设定值,将所述第一节点和所述第二节点所对应的替换表设置为所述第一节点的目标分组列所属表;167.第二设置子单元,用于若第一节点所对应的权重标记值为第二设定值或第三设定值,且第二节点所对应的权重标记值为第一设定值,则设置所述第二节点所对应的权重标记值为第三设定值,将所述第二节点所对应的替换表设置为所述第一节点所对应的替换表;168.第三设置子单元,用于若第一节点所对应的权重标记值为第二设定值,且第二节点所对应的权重标记值为第二设定值,则设置所述第二节点所对应的权重标记值为第三设定值,将所述第二节点所对应的替换表设置为所述第一节点所对应的替换表;169.判断子单元,用于若第一节点所对应的权重标记值为第三设定值,且第二节点所对应的权重标记值为第二设定值,则判断所述第一节点所对应的替换表是否为所述第二节点中的目标分组列所属表;170.第四设置子单元,用于若是,则保持所述第一节点和所述第二节点中的权重标记值和替换表的当前设置不变;171.第五设置子单元,用于若否,则设置所述第二节点所对应的权重标记值为第三设定值,将所述第二节点所对应的替换表设置为所述第一节点所对应的替换表;172.第六设置子单元,用于若第二节点所对应的权重标记值为第三设定值,则保持所述第二节点中权重标记值和替换表的当前设置不变;173.确定子单元,用于在将所述目标链表中每个节点所对应的权重标记值和替换表设置完成后,将所述目标链表中权重标记值为第三设定值的节点中的目标分组列确定为所述第二可标识分组列。174.可选的,在第二节点所对应的权重标记值为第二设定值的情况下,第二确定单元,具体还包括:175.第七设置子单元,用于在设置所述第一节点和所述第二节点所对应的权重标记值和替换表之前,将所述目标链表中指定节点的替换表设置为所述第一节点所对应的替换表,其中,所述指定节点包括替换表为所述第二节点的替换表的节点。176.上述结构化查询语句优化装置可执行本发明任意实施例所提供的结构化查询语句优化方法,具备执行方法相应的功能模块和有益效果。177.实施例三178.图4为本发明实施例三提供的一种电子设备的结构示意图。如图4所示,本发明实施例三提供的电子设备包括:存储装置42和一个或多个处理器41;该电子设备中的处理器41可以是一个或多个,图4中以一个处理器41为例;存储装置42用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如本发明实施例中任一项所述的结构化查询语句优化方法。179.所述电子设备还可以包括:通信装置43、输入装置44和输出装置45。180.电子设备中的处理器41、存储装置42、通信装置43、输入装置44和输出装置45可以通过总线或其他方式连接,图4中以通过总线连接为例。181.该电子设备中的存储装置42作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例一所提供结构化查询语句优化方法对应的程序指令/模块(例如,附图3所示的结构化查询语句优化装置中的模块,包括:创建模块310、第一确定模块320、第二确定模块330、第三确定模块340以及优化模块350)。处理器41通过运行存储在存储装置42中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述方法实施例中结构化查询语句优化方法。182.存储装置42可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储装置42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。183.通信装置43可以包括接收器和发送器。通信装置43设置为根据处理器41的控制进行信息收发通信。184.输入装置44可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置45可包括显示屏等显示设备。185.并且,当上述电子设备所包括一个或者多个程序被所述一个或者多个处理器41执行时,程序进行如下操作:对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表,其中,所述目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,所述目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列;根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。186.实施例四187.本发明实施例四提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行结构化查询语句优化方法,该方法包括:对于分组子句中包含多个分组列的目标结构化查询语句,创建初始链表;确定所述分组子句中属于特征列的分组列,并将所述属于特征列的分组列中满足预设条件的目标分组列和所述目标分组列所属表添加至所述初始链表中,构建成目标链表,其中,所述目标链表中的每个节点用于存储一个目标分组列和对应的目标分组列所属表,所述目标链表的每个节点中包括一个与相应的目标分组列所对应的权重标记值;根据所述分组子句的所有分组列和对应的分组列所属表,以及所述目标链表,确定所述分组子句的所有分组列中的第一可标识分组列;根据所述目标链表中每个节点所对应的权重标记值,确定所述目标链表所包含的目标分组列中的第二可标识分组列;根据所述第一可标识分组列和所述第二可标识分组列,优化所述目标结构化查询语句。188.可选的,该程序被处理器执行时还可以用于执行本发明任意实施例所提供的结构化查询语句优化方法。189.本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(randomaccessmemory,ram)、只读存储器(readonlymemory,rom)、可擦式可编程只读存储器(erasableprogrammablereadonlymemory,eprom)、闪存、光纤、便携式cd-rom、光存储器件、磁存储器件、或者上述的任意合适的组合。计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。190.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。191.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆或无线电频率(radiofrequency,rf)等等,或者上述的任意合适的组合。192.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、smalltalk、c ,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。193.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献