分表分页排序查询方法及装置的制造方法

文档序号:9887712阅读:288来源:国知局
分表分页排序查询方法及装置的制造方法
【技术领域】
[0001]本发明属于数据查询技术领域,尤其涉及一种分表分页排序查询方法及装置。
【背景技术】
[0002]目前分表分页最好的解决技术是计算得出符合查询条件的N张表并分别查询每张表中满足条件的记录数,之后,根据请求页和请求页的记录数,定位到请求页所在的表和该表中记录所处的位置,再根据表和记录所处的位置查询数据库获取相应的记录,最后返回结果至应用层,在数据访问层访问数据库之前与处理完结果后都访问缓存区域,读取或保存相应数据,通过分层分页查询,提高了数据库资源的有效利用,缓解了数据库系统的压力。但上述解决技术有一个问题,其每次查询都要查所有的分表记录数据,不能对所有的分表进行排序,并按排序后的结果进行分页处理,且不能对多个分联进行联合查询。

【发明内容】

[0003]本发明实施例的目的在于提供一种分表分页排序查询方法及装置,旨在解决现有技术无法对数据的查询结果集进行排序显示的问题。
[0004]本发明实施例是这样实现的,一种分表分页排序查询方法,所述方法包括如下步骤:
[0005]通过预设的查询参数和分表规则计算得到分表二维数组;所述分表二维数组的一维数组为同一查询参数值对应的多个分表;
[0006]根据预设的数据结构和所述查询参数为所述分表二级数组建立本次查询的查询结果集的索引表;所述数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数;
[0007]当需要调取所述索引表内待查询页的数据时,根据所述索引表定位该待查询页的数据所在的一组或多组分表;
[0008]调取所述一组或多组分表的数据,并显示。
[0009]进一步地,所述根据预设的数据结构和查询参数为分表二级数组建立本次查询的查询结果集的索引表包括:
[0010]遍历分表二维数组,取每一一维数组;
[0011]创建HashMap,将每一查询参数值作为HashMap的Key,将所述一维数组中每一查询参数值对应的数据作为HashMap的Value,得到索引表。
[0012]进一步地,所述HashMap的Value为一二维数组,第一行数据为同一查询参数值对应的数据在每一分表中的行数,第二行数据为该分表在分表二维数组中的下标值。
[0013]进一步地,所述当需要调取索引表内待查询页的数据时,根据索引表定位该查询页的数据所在的一组或多组分表包括:
[0014]根据所述待查询页的序号和行数,计算所述待查询页的数据所在分表在所述索引表的位置;
[0015]根据所述待查询页的数据所在分表在所述索引表的位置,获取索引表中待查询页的数据所在分表的下标值和所述数据在该分表内的行数。
[0016]本发明还提出一种分表分布排序查询的装置,所述装置包括:
[0017]计算模块,用于通过预设的查询参数和分表规则计算得到分表二维数组;所述分表二维数组的一维数组为同一查询参数值对应的多个分表;
[0018]建立索引模块,用于根据预设的数据结构和所述查询参数为所述分表二级数组建立本次查询的查询结果集的索引表;所述数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数;
[0019]定位模块,用于当需要调取所述索引表内待查询页的数据时,根据所述索引表定位该待查询页的数据所在的一组或多组分表;
[0020]显示模块,用于调取所述一组或多组分表的数据,并显示。
[0021]进一步地,所述建立索引模块包括:
[0022]取数单元,用于遍历分表二维数组,取每一一维数组;
[0023]创建HashMap单元,用于创建HashMap,将每一查询参数值作为HashMap的Key,将所述一维数组中每一查询参数值对应的数据作为HashMap的Value,得到索引表。
[0024]进一步地,所述HashMap的Value为一二维数组,第一行数据为同一查询参数值对应的数据在每一分表中的行数,第二行数据为该分表在分表二维数组中的下标值。
[0025]进一步地,所述定位模块包括:
[0026]计算单元,用于根据所述待查询页的序号和行数,计算所述待查询页的数据所在分表在所述索引表的位置;
[0027]获取单元,用于根据所述待查询页的数据所在分表在所述索引表的位置,获取索引表中待查询页的数据所在分表的下标值和所述数据在该分表内的行数。
[0028]本发明实施例可对查询结果集进行排序显示,解决了任何一种分表、排序、分页查询的问题,作为排序列可以是任何的查询参数,不受限制,分表的规则也不受限制,因此采用排序索引查询结果集定位每一组分表分页数据,速度快,索引数据结构精简,占用内存少,通过缓存保存索引数据,大大减少了数据库的查询。本发明实施例可以封装在一起,能用一行代码处理完所有的功能。
【附图说明】
[0029]图1是本发明实施例一提供的分表分页排序查询方法的流程图;
[0030]图2是本发明实施例一提供的分表分页排序查询方法中索引表的示意图;
[0031]图3是本发明实施例二提供的分表分页排序查询装置的结构图;
[0032]图4是本发明实施例二提供的分表分页排序查询装置中建立索引模块的结构图;
[0033]图5是本发明实施例二提供的分表分页排序查询装置中定位模块的结构图。
【具体实施方式】
[0034]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0035]实施例一
[0036]本发明实施例一提供一种分表分页排序查询方法,如图1所示,本发明实施例一的方法包括步骤:
[0037]S1、通过预设的查询参数和分表规则计算得到分表二维数组;分表二维数组的一维数组为同一查询参数值对应的多个分表。
[0038]上述预设的查询参数可以根据需要进行设置,在实际应用中可能是餐饮类的价格、菜品等。通过查询参数和分表规则计算出所有的多组分表,分别存放于二维数组中,本发明实施例一将该二维数组称为分表二维数组,分表二维数组的一维数据存储同一次查询所关联的分表。
[0039]S2、根据预设的数据结构和查询参数为分表二级数组建立本次查询的查询结果集的索引表;数据结构包括查询参数、所述查询参数对应的一维数组内每一分表的序号和行数。
[0040]具体地,遍历分表二维数组,取得每一个一维数组,将一维数组中的每个分表替换分组SQL中对应的原始表,并在此分组SQL上加排序和分组的功能即Order by和Group by,分组和排序都是用同一列数据,该列数据称之为排序列,排序列的值为每一具体的查询参数值。
[0041]如图2所示,设置一数据结构建立本次查询的查询结果集的索引表,可创建HashMap用于存放每组查询的合并后的索引数据。先创建一个保存总行数的变量,查询返回的数据是一个列表,包括查询参数值和查询参数值对应的二维数组两列数据。然后遍历这个列表,将每一行数据合并到HashMap中,即将查询参数值相同的数据进行合并,HashMap的key是查询参数值,HashMap的Value是有两行的二维数组,存放查询参数值对应的索引数据,即索引二维数组,第一行存放是同一查询参数值对应数据在每一分表中的行数,第二行存入该分表在分表二维数组中的下标值。将每一查询参数值的行数累加到总行数中,遍历分表二维数组后,完成将所有索引数据存放HashMap中,并计算出了总行数,再将这个HashMap和总行数保存在缓存中,缓存的Key值是分页查询SQL,Value是HashMap和总行数,缓存超时时间默认是I分种。
[0042]S3、当需要调取索引表内待查询页的数据时,根据索引表定位该待查询页的数据所在的一组或多组分表;
[0043]当需要调取索引表内待查询页的数据时,输入查询的SQL、待查询页的开始位置和每页的行数。通过SQL从缓存中查出HashMap。创建一个变量用于记录已遍历过的行数,SP变量A。遍历HashMap的Key值,通过Key值取得对应的Value值,Value值是索引二维数组。将索引二维数组的行数累加,再和变量A相加,将相加后的值存在变量A中。如果变量A的值等于或大于待查询页的开始位置时,记录下此数组的下标,此为开始下标,再用变量A值减去待查询页的开始位置,得到值再往后累加相应的行数,如果等于或大于每页的大小,记录下此数组的下标,此下标就是结束下标,通过开始下标和结束下标截取索引二维数组第二行数据,截取出来的数据是一维组件,它存放是分表二维组件中分表的下标值,如此,可从分表二维数组找出多组分表。如果存在相同的分表,则把它们合平并,并且对应的行数也累加,累加后的行数就是一组分表分页查询的行数,再通过开始下标和结束下标计算出每一组分表查询的开始位置。
[0044]S4、调取一组或多组分表的数据,并显示。
[0045]创建一个列表存储每组分表查询返回的经果集,把它叫做结果集列表,遍历这些多组分表,把每一组分表替换SQL对应的原始表,通过开始位置和页的行数在SQL上加上分页的功能,然后通过SQL进行查询返回结果集采用快速排序法进行排序。依次遍历完所有的列表后,结果集列表就是分表排序分页查询的结果。
[0046]本发明实施例一以比较通用的方法解决了任何一种分表、排序、分页查询的问题。排序列是任何的列,不受限制。分表的规则也不受限制。采用排序索引定位每一组分表分页数据,速度快,索引数据结构精简,占用内存少,通过缓存保存索引数据,减少数据库的查询。本发明的功能可以封装在一起,能用一行代码处理完所
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1