一种跨表查询方法及相关装置与流程

文档序号:16390719发布日期:2018-12-22 11:31阅读:143来源:国知局
一种跨表查询方法及相关装置与流程

本申请涉及计算机技术领域,特别涉及一种跨表查询方法、跨表查询系统、服务器以及计算机可读存储介质。

背景技术

在数据库中通常通过多种索引结构提高数据库的访问度,一般包括但不限于b树索引、位图索引、反向索引。假设有表t1,其中有列(c1,c2,c3),其中有1万条记录(假设需要100个数据块存储全部记录)。为了提高查询速度,对列c1上创建索引idx1,一条索引记录中包括一个rowid(数据库中每一行记录的唯一编号)和c1列的值,所以一条索引记录在数据库块中占用的存储空间很小,一个数据库中可以包含大量索引记录,所以存储索引ind1所有记录可能只需要10个数据库块。当执行查询时,首先会在索引记录中查找该条件的记录,当找到后读取其rowid,然后再根据rowid到表中读取相应记录,以得到查询结果。

当需要对两个表进行查询时,现有技术一般是对两个表分别建立对应的索引,然后根据查询条件在两个索引中均进行查询,将得到查询数据进行聚合得到最后的查询结果。但是当每个索引中的记录数量都达到万级别时,通过两个索引查询同一个条件时,则会分别进行两次单独的索引查询操作,通常会增加查询的时间长度。进一步,当表的数量增多时会严重影响数据的查询时长,降低查询效率。

因此,如何提高多个表的查询速度是本领域技术人员关注的重点问题。



技术实现要素:

本申请的目的是提供一种跨表查询方法、跨表查询系统、服务器以及计算机可读存储介质,通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

为解决上述技术问题,本申请提供一种跨表查询方法,包括:

确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引;

当接收到查询指令时,根据所述查询指令对所述跨表索引进行查询,得到对应的rowid;

根据所述rowid的数量选择对应的数据获取操作,执行所述数据获取操作得到查询结果。

可选的,确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引,包括:

根据查询业务确定多个所述待查询表中的索引列;

将每个索引列中列值相同的记录和对应的多个rowid构成跨表索引的索引记录;

将每个索引列中剩余的记录和对应的roeid分别构成跨表索引的索引记录;

将所有所述索引记录生成所述跨表索引。

可选的,根据所述rowid的数量选择对应的数据获取操作,执行所述数据获取操作得到查询结果,包括:

当所述rowid的数量为1时,根据所述rowid在对应的表读取到记录数据,将所述记录数据作为所述查询结果。

可选的,根据所述rowid的数量选择对应的数据获取操作,执行所述数据获取操作得到查询结果,包括:

当所有所述rowid的数量大于1时,根据每个所述rowid在对应的表读取到记录数据,将所有所述记录数据进行聚合处理,得到所述查询结果。

可选的,该方法还包括:

当任一所述待查询表中插入新记录时,判断所述跨表索引是否有与所述新纪录的索引列的列值相同的索引记录;

若是,则将所述新记录的rowid更新到所述索引记录中;

若否,则将有所述新纪录的索引列的列值和对应的rowid添加到所述跨表索引中。

可选的,该方法还包括:

当任一所述待查询表中删除记录时,判断所述跨表索引中待删除记录对应的索引记录的rowid的数量是否为1;

若是,则将所述待删除记录的索引记录删除;

若否,则将所述索引记录中所述待删除记录对应的rowid置空。

本申请还提供一种跨表查询系统,包括:

跨表索引建立模块,用于确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引;

rowid查询模块,用于当接收到查询指令时,根据所述查询指令对所述跨表索引进行查询,得到对应的rowid;

查询结果获取模块,用于根据所述rowid的数量选择对应的数据获取操作,执行所述数据获取操作得到查询结果。

可选的,所述跨表索引建立模块,包括:

索引列确定单元,用于根据查询业务确定多个所述待查询表中的索引列;

第一索引记录获取单元,用于将每个索引列中列值相同的记录和对应的多个rowid构成跨表索引的索引记录;

第二索引记录获取单元,用于将每个索引列中剩余的记录和对应的roeid分别构成跨表索引的索引记录;

跨表索引获取单元,用于将所有所述索引记录生成所述跨表索引。

本申请还提供一种服务器,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如以上实施例所述的跨表查询方法的步骤。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的跨表查询方法的步骤。

本申请所提供的一种跨表查询方法,包括:确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引;当接收到查询指令时,根据所述查询指令对所述跨表索引进行查询,得到对应的rowid;根据所述rowid的数量选择对应的数据获取操作,执行所述数据获取操作得到查询结果。

通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

本申请还提供一种跨表查询系统、服务器以及计算机可读存储介质,具有以上有益效果,在此不作赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种跨表查询方法的流程图;

图2为本申请实施例所提供的跨表查询方法的跨表索引获取方法的流程图;

图3为本申请实施例所提供的跨表查询方法的新记录插入方法的流程图;

图4为本申请实施例所提供的跨表查询方法的索引记录删除方法的流程图;

图5为本申请实施例所提供的一种跨表查询系统的结构示意图。

具体实施方式

本申请的核心是提供一种跨表查询方法、跨表查询系统、服务器以及计算机可读存储介质,通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

当需要对两个表进行查询时,现有技术一般是对两个表分别建立对应的索引,然后根据查询条件在两个索引中均进行查询,将得到查询数据进行聚合得到最后的查询结果。但是当每个索引中的记录数量都达到万级别时,通过两个索引查询同一个条件时,则会分别进行两次单独的索引查询操作,通常会增加查询的时间长度。进一步,当表的数量增多时会严重影响数据的查询时长,降低查询效率。

因此,本实施例通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

具体的,请参考图1,图1为本申请实施例所提供的一种跨表查询方法的流程图。

该方法可以包括:

s101,确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引;

本步骤旨在对多个待查询表建立一个跨表索引,该跨表索引中保存了所有待查询表的索引内容。因此,当通过该跨表索引进行查询可以查询所有表的内容。而在现有技术中,已经存在了对单一表建立索引的技术,提高查询速度,但是当表的数量增多,每个表中的记录数量增多时,对每个表的索引进行查询的速度较慢,每进行一次查询所耗费的时间较多。所以,通过本实施例提供的跨表索引进行查询,对多个表的查询只可以进行一个,无论多少个表都将查询次数降低为一次,进而提高了查询速度。

其中,索引列是指将表中的某一个列作为索引中的被查询的列。一般的,确定多个待查询表的索引列应该是相同的列值,例如,每个表中均有姓名的列,那么可以将所有表中的姓名列作为索引列。当然,在特殊情况下也可以将不同列值的列作为索引列,例如,一部表中存在家长姓名列,另一部分表中是学生姓名列,可以将家长姓名列和学生姓名列同时作为索引列。因此,在本实施例中索引列的确定方式并不唯一,在此不做具体限定。

s102,当接收到查询指令时,根据查询指令对跨表索引进行查询,得到对应的rowid;

在步骤s101的基础上,本步骤旨在当接收到查询指令时,根据查询指令对跨表索引进行查询,得到对应的rowid。其中,查询指令包含了对应的查询条件,可以通过查询条件得到对应的结果,也就是rowid。

需要说明的是,跨表索引中一个索引记录可能保存了一个或多个rowid,因此,本步骤中根据查询指令进行查询有可能得到一个或多个rowid,所有的rowid均作为查询的结果,可以从每个表中获取到相应的查询结果。

s103,根据rowid的数量选择对应的数据获取操作,执行数据获取操作得到查询结果。

在步骤s102的基础上,本步骤需要根据不同的rowid的数量选择对应的数据获取操作,执行该数据获取操作得到查询结果。

其中,对应的rowid的数量对应的数据获取操作有两种,一种是只有一个rowid对应的数据获取操作,另一种是数量大于1的rowid对应的数据获取操作。

可选的,本步骤可以包括:

当rowid的数量为1时,根据rowid在对应的表读取到记录数据,将记录数据作为查询结果。

本可选方案中由于只有一个rowid也就是只对应了一条待查询表中的记录,因此可以根据该rowid在对应的表中直接读取到记录数据,并将该记录数据作为查询结果。

可选的,本步骤可以包括:

当所有rowid的数量大于1时,根据每个rowid在对应的表读取到记录数据,将所有记录数据进行聚合处理,得到查询结果。

本可选方案中由于获取到了多条rowid,每个rowid均对应了不同表中的记录数据,因此需要将多条rowid对应的记录数据分别读取出,得到多个记录数据,将所有的记录数据进行聚合处理得到查询结果。例如,在跨表索引中根据姓名进行查询,得到两个rowid,分别对应了基本信息表和职业信息表,对这两个表读物读取数据得到该姓名对应的基本信息记录数据和职业信息记录数据,可以将这两个数据进行聚合成为一条记录数据,作为查询结果。

综上,本实施例通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

在上一实施例的基础上,本实施例主要针对上一实施例中的如何生成相应的跨表索引进行具体说明,其他部分与上一实施例大体相同,相同部分可以参考上一实施例,在此不做赘述。

具体的,请参考图2,图2为本申请实施例所提供的跨表查询方法的跨表索引获取方法的流程图。

该方法可以包括:

s201,根据查询业务确定多个待查询表中的索引列;

本步骤旨在根据查询业务确定索引列。其中,查询业务是指本次在多个待查询表中进行查询的查询条件。例如,查询条件为姓名,那么就在多个待查询表中将与姓名对应的列作为索引列。

s202,将每个索引列中列值相同的记录和对应的多个rowid构成跨表索引的索引记录;

在步骤s201的基础上,本步骤旨在将每个索引列中列值相同的记录和对应的多个rowid构成一条跨表索引的索引记录。例如,每个索引列中均保存了列值为“小正”的记录数据,也就是该“小正”会对应多条rowid,因此将“小正”和后续多条rowid构成一条索引记录。如果多个索引列中只有大于1个的索引列中保存了相同的列值,那么也将该列值和对应的rowid构成一条索引记录,例如,有三个待查询表,其中,只有两个带查询表中的索引列中保存了“小正”的列值,那么也将该列值和对应的rowid构成一条索引记录。

s203,将每个索引列中剩余的记录和对应的roeid分别构成跨表索引的索引记录;

在步骤s202的基础上,本步骤旨在将每个索引列中剩余的记录和对应的rowid分别构成索引记录,由于,本步骤中剩余的记录只对应了一个rowid,因此可以采用现有技术提供的索引记录构成方法,得到索引记录,也就是组成跨表索引的剩余的索引记录数据。

s204,将所有索引记录生成跨表索引。

在步骤s203的基础上,本步骤旨在将所有的索引记录组成该跨表索引。

本实施例,通过对多个表建立同一个跨表索引,当对这些表同时进行查询时,只对跨表索引进行查询即可完成对全部内容的查询操作,避免了对每个表均需要进行一遍索引查询,将多次查询减少为一次查询,降低了查询次数,提高了跨表查询的速度。

基于上一实施例,还可以提供一种更加具体的实时方式。首先在数据库中规定一种创建跨表索引的语句createindexind3on(列,列),在创建跨表索引时确定索引列,然后根据确定的索引列编写该跨表索引语句。例如,createindexind3on(t1.c1,t2.c1),是在t1.c1和t2.c1上创建跨表索引。

进一步的,执行该语句,数据库内部对语句合法性进行解析和判断,正确的语句才会开始执行。数据库获取需要创建索引的表及列名,如本列的t1.c1,t2.c1;数据库分别从表t1读取c1全部列值及rowid,从表t2读取c1全部列值及rowid,将全部列值读取到内存;开始对所有列值进行匹配并构每条建索引记录,首先将各列中列值相等的记录以及列对应的rowid构成每条索引记录,最后将列值不同的记录及rowid分别构成一条索引记录(该列值由于和其它列值不同,所以该条索引记录中只包括该列记录,而无其它列的记录),最终生成一个完整的索引。

基于以上所有实施例,本实施例还提供一种跨表查询方法的新记录插入方法。

请参考图3,图3为本申请实施例所提供的跨表查询方法的新记录插入方法的流程图。

该方法可以包括:

s301,当任一待查询表中插入新记录时,判断跨表索引是否有与新纪录的索引列的列值相同的索引记录;若是,则执行s302;若否,则执行s303;

s302,将新记录的rowid更新到索引记录中;

s303,将有新纪录的索引列的列值和对应的rowid添加到跨表索引中。

本实施例提供一种向跨表索引添加新的索引记录的方法。由于对任一待查询表插入新记录时,有可能添加的是另一个待查询表中的已存在的记录。也就是说跨表索引中已存在相应的索引记录,此时只需要将新添加到表中的rowid更新到该索引记录中。还有一种可能是新添加的记录在跨表索引没有相同的值,那么就直接将新纪录的列值和对应的rowid添加到跨表索引中。

基于以上所有实施例,本实施例还提供一种跨表查询方法的索引记录删除方法。

请参考图4,图4为本申请实施例所提供的跨表查询方法的索引记录删除方法的流程图。

该方法可以包括:

s401,当任一待查询表中删除记录时,判断跨表索引中待删除记录对应的索引记录的rowid的数量是否为1;若是,则执行s402;若否,则执行s403;

s402,将待删除记录的索引记录删除;

s403,将索引记录中待删除记录对应的rowid置空。

本实施例旨在当需要删除任一待查询表中的记录时,可以判断在该跨表索引中的待删除记录对应的索引记录的rowid的数量是否为1,也就是该待删除记录对应的索引记录有可能保存了多个表中的rowid,也有可能只保存了一个表中的rowid。如果只保存了一个表中的rowid,那么只需要将该索引记录全部删除即可。如果保存了多个表的rowid,那么需要删除该待删除记录的表对应的rowid即可,其他的不做修改。

下面对本申请实施例提供的一种跨表查询系统进行介绍,下文描述的一种跨表查询系统与上文描述的一种跨表查询方法可相互对应参照。

请参考图5,图5为本申请实施例所提供的一种跨表查询系统的结构示意图。

该系统可以包括:

跨表索引建立模块100,用于确定多个待查询表中的索引列,将每个索引列和对应的rowid作为索引内容建立在同一个索引中,得到跨表索引;

rowid查询模块200,用于当接收到查询指令时,根据查询指令对跨表索引进行查询,得到对应的rowid;

查询结果获取模块300,用于根据rowid的数量选择对应的数据获取操作,执行数据获取操作得到查询结果。

可选的,该跨表索引建立模块100可以包括:

索引列确定单元,用于根据查询业务确定多个待查询表中的索引列;

第一索引记录获取单元,用于将每个索引列中列值相同的记录和对应的多个rowid构成跨表索引的索引记录;

第二索引记录获取单元,用于将每个索引列中剩余的记录和对应的roeid分别构成跨表索引的索引记录;

跨表索引获取单元,用于将所有索引记录生成跨表索引。

本申请实施例还提供一种服务器,包括:

存储器,用于存储计算机程序;

处理器,用于执行计算机程序时实现如以上实施例的跨表查询方法的步骤。

本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如以上实施例所述的跨表查询方法的步骤。

该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上对本申请所提供的一种跨表查询方法、跨表查询系统、服务器以及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1