数据库查询方法和装置制造方法
【专利摘要】本发明公开了一种数据库查询方法和装置。其中,该数据库查询方法包括:获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表;将第一维度表和第二维度表与指标表做内联接处理,得到第一数据;获取第一维度表的第一主键列和第二维度表的第二主键列;组合第一主键列的第一主键和第二主键列的第二主键,得到第三主键列;将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据;合并第一数据和第二数据,得到目标数据。通过本发明,解决了现有技术中在数据库中查询数据的效率低的问题,实现了提高查询目标数据的效率的效果。
【专利说明】数据库查询方法和装置
【技术领域】
[0001]本发明涉及数据处理领域,具体而言,涉及一种数据库查询方法和装置。
【背景技术】
[0002]在SQL数据库中进行查询时,若x、y表示两个维度表,z表示指标表,其中,指标表Z中分别外键关联X的主键和I的主键,那么在查询数据时需要以X、y和Z为基础查询出X中的每一行在I的每一行上基于Z的指标表现。现有技术中,需要先将X与y交叉联接,然后再与Z左联接,基于X、y和z联接后的结果进行维度分组和指标聚合计算得出最后的目标查询结果。
[0003]其中,SQL为Structured Query Language,即结构化查询语言,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;维度表即应用系统中的实体表,如广告投放系统中广告、项目、广告主等都是维度表;指标表是应用系统用以存储检测或计算出的指标的表,指标表一般会外键关联一个或多个维度表,以表示维度上的指标表现,如广告投放系统中广告性能表,该指标表包含点击、曝光、独立点击等指标列,且外键关联维度表广告和时间;交叉联接不带WHERE子句,它返回被联接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数;左联接又名左外联接,是查询结果集既包括联接表的匹配行,也包括左联接表的所有行。
[0004]现有技术主要有以下两个缺点:
[0005]1、交叉联接性能低下,且无法应用维度表的聚集索引。
[0006]2、未关联任何指标的维度行也都参与了指标的分组聚合计算。
[0007]其中,聚集索引是一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。
[0008]针对现有技术中在数据库中查询数据的效率低的问题,目前尚未提出有效的解决方案。
【发明内容】
[0009]本发明的主要目的在于提供一种数据库查询方法和装置,以解决现有技术中在数据库中查询数据的效率低的问题。
[0010]为了实现上述目的,根据本发明的一个方面,提供了一种数据库查询方法。
[0011]根据本发明的数据库查询方法包括:获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表;将第一维度表和第二维度表与指标表做内联接处理,得到第一数据;获取第一维度表的第一主键列和第二维度表的第二主键列;组合第一主键列的第一主键和第二主键列的第二主键,得到第三主键列;将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据;合并第一数据和第二数据,得到目标数据。
[0012]进一步地,将第一维度表和第二维度表与指标表做内联接处理,得到第一数据包括:将第一维度表和第二维度表与指标表做内联接处理,得到第三数据;将第三数据做维度分组和指标聚合计算,得到第一数据。
[0013]进一步地,将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据包括:判断第三主键列中的第三主键是否存在于第一数据;若第三主键列中的第三主键存在于第一数据,则舍弃第三主键,得到更新后的第三主键列;使用更新后的第三主键列与第一维度表和第二维度表做内联接处理,得到第四数据;补充第四数据中的指标列,得到第二数据。
[0014]进一步地,补充第四数据中的指标列,得到第二数据包括:对第四数据进行维度分组得到第五数据;补充第五数据中的指标列,并使用零或空设置指标列的值,得到第二数据。
[0015]进一步地,获取第一维度表的第一主键列和第二维度表的第二主键列包括:查询第一维度表中的第一主键列,保存第一主键列至第一数据表;查询第二维度表中的第二主键列,保存第二主键列至第二数据表;从第一数据表中读取第一主键列和从第二数据表中读取第二主键列。
[0016]为了实现上述目的,根据本发明的另一方面,提供了一种数据库查询装置。
[0017]根据本发明的数据库查询装置包括:第一获取模块,用于获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表;第一内联接模块,用于将第一维度表和第二维度表与指标表做内联接处理,得到第一数据;第二获取模块,用于获取第一维度表的第一主键列和第二维度表的第二主键列;组合模块,用于组合第一主键列中的第一主键和第二主键列中的第二主键,得到第三主键列;第二内联接模块,用于将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据;合并模块,用于合并第一数据和第二数据,得到目标数据。
[0018]进一步地,第一内联接模块包括:第一内联接子模块,用于将第一维度表和第二维度表与指标表做内联接处理,得到第三数据;计算模块,用于将第三数据做维度分组和指标聚合计算,得到第一数据。
[0019]进一步地,第二内联接模块包括:判断模块,用于判断第三主键列中的第三主键是否存在于第一数据;舍弃模块,用于在第三主键列中的第三主键存在于第一数据的情况下,舍弃第三主键,得到更新后的第三主键列;第二内联接子模块,用于使用更新后的第三主键列与第一维度表和第二维度表做内联接处理,得到第四数据;补充模块,用于补充第四数据中的指标列,得到第二数据。
[0020]进一步地,补充模块包括:分组模块,用于对第四数据进行维度分组得到第五数据;补充子模块,用于补充第五数据中的指标列,并使用零或空设置指标列的值,得到第二数据。
[0021]进一步地,第二获取模块包括:第一查询模块,用于查询第一维度表中的第一主键列,保存第一主键列至第一数据表;第二查询模块,用于查询第二维度表中的第二主键列,保存第二主键列至第二数据表;从第一数据表中读取第一主键列和从第二数据表中读取第二主键列。
[0022]采用本发明实施例,在从数据库中获取待查询的目标数据对应的第一维度表、第二维度表以及指标表之后,将第一维度表和第二维度表与指标表做内联接处理得到第一数据;然后获取第一维度表的第一主键列和第二维度表的第二主键列,组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列,并将第三主键列与第一维度表和第二维度表做内联接处理得到第二数据;合并第一数据和第二数据,即可得到目标数据。在本发明上述实施例中,将目标数据拆分为两个部分分别进行查询,通过第一维度表和第二维度表与指标表的内联接计算得到有意义的数据(即上述实施例中的第一数据),并遍历维度表补充内联接中删除的数据得到无意义的数据(即上述实施例中的第二数据),合并第一数据和第二数据得到目标数据,无需对两个维度表和指标表进行交叉联接,避免了现有技术中对维度表中无意义的维度行参与指标表的分组聚合计算,提高了获取目标数据的效率,并且使用内联接可以应用聚集索引,通过使用聚集索引可以进一步提高获取目标数据的效率。通过本发明实施例,解决了现有技术中在数据库中查询数据的效率低的问题,实现了提高查询目标数据的效率的效果。
【专利附图】
【附图说明】
[0023]构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0024]图1是根据本发明实施例的数据库查询方法的流程图;
[0025]图2是根据本发明实施例的一种可选的数据库查询方法的流程图;以及
[0026]图3是根据本发明实施例的数据库查询装置的示意图。
【具体实施方式】
[0027]首先,在对本发明实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
[0028]SQL为Structured Query Language,即结构化查询语言,SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
[0029]维度表即应用系统中的实体表,如广告投放系统中广告、项目、广告主等都是维度表。
[0030]指标表是应用系统用以存储检测或计算出的指标的表,指标表一般会外键关联一个或多个维度表,以表不维度上的指标表现,如广告投放系统中广告性能表,该指标表包含点击、曝光、独立点击等指标列,且外键关联维度表广告和时间。
[0031]交叉联接不带WHERE子句,它返回被联接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
[0032]左联接又名左外联接,是查询结果集既包括联接表的匹配行,也包括左联接表的所有行。
[0033]聚集索引是一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序,由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引,但该索引可以包含多个列(组合索引)。
[0034]内联接也叫联接,是最早的一种联接,还可以被称为普通联接或者自然联接,内联接是从结果表中删除与其他被联接表中没有匹配行的所有行。
[0035]为了使本【技术领域】的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0036]需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0037]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
[0038]图1是根据本发明实施例的数据库查询方法的流程图,如图1所示,该数据库查询方法可以包括如下的步骤S102至步骤SI 12:
[0039]步骤S102,获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表。
[0040]步骤S104,将第一维度表和第二维度表与指标表做内联接处理,得到第一数据。
[0041]步骤S106,获取第一维度表的第一主键列和第二维度表的第二主键列。
[0042]步骤S108,组合第一主键列中的第一主键和第二主键列中的第二主键,得到第三主键列。
[0043]步骤S110,将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据。
[0044]步骤SI 12,合并第一数据和第二数据,得到目标数据。
[0045]采用本发明实施例,在从数据库中获取待查询的目标数据对应的第一维度表、第二维度表以及指标表之后,将第一维度表和第二维度表与指标表做内联接处理得到第一数据;然后获取第一维度表的第一主键列和第二维度表的第二主键列,组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列,并将第三主键列与第一维度表和第二维度表做内联接处理得到第二数据;合并第一数据和第二数据,即可得到目标数据。在本发明上述实施例中,将目标数据拆分为两个部分分别进行查询,通过第一维度表和第二维度表与指标表的内联接计算得到有意义的数据(即上述实施例中的第一数据),并遍历维度表补充内联接中删除的数据得到无意义的数据(即上述实施例中的第二数据),合并第一数据和第二数据得到目标数据,无需对两个维度表和指标表进行交叉联接,避免了现有技术中对维度表中无意义的维度行参与指标表的分组聚合计算,提高了获取目标数据的效率,并且使用内联接可以应用聚集索引,通过使用聚集索引可以进一步提高获取目标数据的效率。通过本发明实施例,解决了现有技术中在数据库中查询数据的效率低的问题,实现了提高查询目标数据的效率的效果。
[0046]根据本发明上述实施例,将第一维度表和第二维度表与指标表做内联接处理,得到第一数据可以包括:将第一维度表和第二维度表与指标表做内联接处理,得到第三数据;将第三数据做维度分组和指标聚合计算,得到第一数据。
[0047]具体地,将第一维度表和第二维度表与指标表进行内联接得到第三数据,然后对得到的第三数据进行维度分组和指标聚合计算,得到第一数据。
[0048]通过本发明实施例,通过对维度表和指标表进行内联接处理,无需对维度表和指标表进行交叉联接处理,避免了维度表中无意义的维度行与指标表中的各个指标行进行分组聚合计算,提高了获得第一数据的效率,进而提高了查询目标数据的效率。
[0049]根据本发明上述实施例,将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据可以包括:判断第三主键列中的第三主键是否存在于第一数据;若第三主键列中的第三主键存在于第一数据,则舍弃第三主键,得到更新后的第三主键列;使用更新后的第三主键列与第一维度表和第二维度表做内联接处理,得到第四数据;补充第四数据中的指标列,得到第二数据。
[0050]具体地,在将第三主键列与第一维度表和第二维度表进行内联接时,首先判断第三主键列中的第三主键是否存在于第一数据,并在第三主键列中的第三主键存在于第一数据时,舍弃第三主键,得到更新后的第三主键列,并使用更新后的第三主键列与第一维度表和第二维度表进行内联接得到第四数据,然后补充第四数据中的指标列,得到第二数据。
[0051]通过本发明上述实施例,将第三主键列中与第一数据中的主键重复的主键删除,并使用更新后的第三主键列与两个维度表进行内联接,无需对第一数据中已存在的数据进行再次处理,可以进一步地提高查询目标数据的效率。
[0052]进一步地,补充第四数据中的指标列,得到第二数据可以包括:对第四数据进行维度分组得到第五数据;补充第五数据中的指标列,并使用零或空设置指标列的值,得到第二数据。
[0053]具体地,在对第四数据进行维度分组得到第五数据之后,将第五数据中的指标列补充为默认空值(如O或空),将补充后的第五数据作为第二数据。
[0054]通过本发明上述实施例,将内联接处理删除无意义的指标列的值重新补充为默认空值,保证了目标数据中的各个维度值和指标值的完整性,避免了由于数据丢失而导致的目标数据不准确,提高了查询目标数据的准确度。
[0055]在本发明的上述实施例中,获取第一维度表的第一主键列和第二维度表的第二主键列可以包括:查询第一维度表中的第一主键列,保存第一主键列至第一数据表;查询第二维度表中的第二主键列,保存第二主键列至第二数据表;从第一数据表中读取第一主键列和从第二数据表中读取第二主键列。
[0056]具体地,在获取第一维度表的第一主键列和第二维度表的第二主键列时,将查询到的第一维度表中的第一主键列保存至第一数据表,将查询到的第二维度表中的第二主键列保存至第二数据表,然后读取第一数据表中的第一主键列和第二数据表中的第二主键列。
[0057]进一步地,可以通过遍历第一数据表中的第一主键列,并在遍历第一主键列中的每一行时,遍历第二数据表中的第二主键列的各个行,得到组合行,将得到的组合行作为第三主键列。通过本发明上述实施例,实现了组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列。
[0058]图2是根据本发明实施例的一种可选的数据库查询方法的流程图,如图2所示,该数据库查询方法可以包括如下步骤:
[0059]步骤S202,将维度表X、维度表y与指标表z做内联接,得到第三数据。
[0060]其中,维度表X即本发明上述实施例中的第一维度表,维度表y即本发明上述实施例中的第二维度表,维度表z即本发明上述实施例中的指标表。
[0061]步骤S204,对第三数据做维度分组和指标聚合计算,得到有意义的数据R1。
[0062]其中,数据Rl即本发明上述实施例中的第一数据。
[0063]步骤S206,查询出数据表X的主键列并存入临时表Xl (x_id)。
[0064]步骤S208,查询出数据表y的主键列并存入临时表yl (y_id)。
[0065]步骤S210,先遍历临时表xl (x_id)的所有行,在遍历临时表xl (x_id)的每一行时,遍历临时表yl (y_id)中的所有行,得到[x_id, y_id]的组合行。
[0066]其中,组合行即本发明上述实施例中的第三主键列。
[0067]步骤S212,依次判断[x_id,y_id]中的各行是否在数据Rl中。
[0068]其中,如果[x_id,y_id]中的一行在数据Rl中,执行步骤S214 ;如果[x_id,y_id]中的一行不在数据Rl中,执行步骤S216。
[0069]步骤S214,舍弃该行。
[0070]步骤S216,将该行存入临时表[x_y_id]。
[0071]其中,临时表[x_y_id]即本发明上述实施例中的更新后的第三主键列。
[0072]步骤S218,将临时表[x_y_id]与维度表x和维度表y做内联接,得到第四数据。
[0073]步骤S220,对第四数据做维度分组,并补充指标列为默认空值(如,O或空),得到无意义的数据R2。
[0074]其中,数据R2即本发明上述实施例中的第二数据。
[0075]步骤S222,将数据Rl和数据R2合并后得到目标数据。
[0076]通过本发明上述实施例,通过将目标数据拆分为有意义和无意义的两部分数据分别进行查询计算,以内联接计算出有意义的数据部分,以遍历维度表并补充指标列为默认空值的方法计算出无意义的数据部分,将有意义和无意义的两部分数据合并在一起得到目标数据,可以避免在维度表之间进行交叉联接以及维度表中无意义的维度行参与指标列的分组聚合计算,使用内联接可以更好地使用聚集索引,提高了查询目标数据的效率。
[0077]需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0078]图3是根据本发明实施例的数据库查询装置的示意图,如图3所示,该数据库查询装置可以包括:第一获取模块10,用于获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表;第一内联接模块30,用于将第一维度表和第二维度表与指标表做内联接处理,得到第一数据;第二获取模块50,用于获取第一维度表的第一主键列和第二维度表的第二主键列;组合模块70,用于组合第一主键列中的第一主键和第二主键列中的第二主键,得到第三主键列;第二内联接模块90,用于将第三主键列与第一维度表和第二维度表做内联接处理,得到第二数据;合并模块110,用于合并第一数据和第二数据,得到目标数据。
[0079]采用本发明实施例,在从数据库中获取待查询的目标数据对应的第一维度表、第二维度表以及指标表之后,将第一维度表和第二维度表与指标表做内联接处理得到第一数据;然后获取第一维度表的第一主键列和第二维度表的第二主键列,组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列,并将第三主键列与第一维度表和第二维度表做内联接处理得到第二数据;合并第一数据和第二数据,即可得到目标数据。在本发明上述实施例中,将目标数据拆分为两个部分分别进行查询,通过第一维度表和第二维度表与指标表的内联接计算得到有意义的数据(即上述实施例中的第一数据),并遍历维度表补充内联接中删除的数据得到无意义的数据(即上述实施例中的第二数据),合并第一数据和第二数据得到目标数据,无需对两个维度表和指标表进行交叉联接,避免了现有技术中对维度表中无意义的维度行参与指标表的分组聚合计算,提高了获取目标数据的效率,并且使用内联接可以应用聚集索引,通过使用聚集索引可以进一步提高获取目标数据的效率。通过本发明实施例,解决了现有技术中在数据库中查询数据的效率低的问题,实现了提高查询目标数据的效率的效果。
[0080]根据本发明上述实施例,第一内联接模块可以包括:第一内联接子模块,用于将第一维度表和第二维度表与指标表做内联接处理,得到第三数据;计算模块,用于将第三数据做维度分组和指标聚合计算,得到第一数据。
[0081]具体地,将第一维度表和第二维度表与指标表进行内联接得到第三数据,然后对得到的第三数据进行维度分组和指标聚合计算,得到第一数据。
[0082]通过本发明实施例,通过对维度表和指标表进行内联接处理,无需对维度表和指标表进行交叉联接处理,避免了维度表中无意义的维度行与指标表中的各个指标行进行分组聚合计算,提高了获得第一数据的效率,进而提高了查询目标数据的效率。
[0083]根据本发明上述实施例,第二内联接模块可以包括:判断模块,用于判断第三主键列中的第三主键是否存在于第一数据;舍弃模块,用于在第三主键列中的第三主键存在于第一数据的情况下,舍弃第三主键,得到更新后的第三主键列;第二内联接子模块,用于使用更新后的第三主键列与第一维度表和第二维度表做内联接处理,得到第四数据;补充模块,用于补充第四数据中的指标列,得到第二数据。
[0084]具体地,在将第三主键列与第一维度表和第二维度表进行内联接时,首先判断第三主键列中的第三主键是否存在于第一数据,并在第三主键列中的第三主键存在于第一数据时,舍弃第三主键,得到更新后的第三主键列,并使用更新后的第三主键列与第一维度表和第二维度表进行内联接得到第四数据,然后补充第四数据中的指标列,得到第二数据。
[0085]通过本发明上述实施例,将第三主键列中与第一数据中的主键重复的主键删除,并使用更新后的第三主键列与两个维度表进行内联接,无需对第一数据中已存在的数据进行再次处理,可以进一步地提高查询目标数据的效率。
[0086]进一步地,补充模块可以包括:分组模块,用于对第四数据进行维度分组得到第五数据;补充子模块,用于补充第五数据中的指标列,并使用零或空设置指标列的值,得到第二数据。
[0087]具体地,在对第四数据进行维度分组得到第五数据之后,将第五数据中的指标列补充为默认空值(如O或空),将补充后的第五数据作为第二数据。
[0088]通过本发明上述实施例,将内联接处理删除无意义的指标列的值重新补充为默认空值,保证了目标数据中的各个维度值和指标值的完整性,避免了由于数据丢失而导致的目标数据不准确,提高了查询目标数据的准确度。
[0089]在本发明的上述实施例中,第二获取模块可以包括:第一查询模块,用于查询第一维度表中的第一主键列,保存第一主键列至第一数据表;第二查询模块,用于查询第二维度表中的第二主键列,保存第二主键列至第二数据表;从第一数据表中读取第一主键列和从第二数据表中读取第二主键列。
[0090]具体地,在获取第一维度表的第一主键列和第二维度表的第二主键列时,将查询到的第一维度表中的第一主键列保存至第一数据表,将查询到的第二维度表中的第二主键列保存至第二数据表,然后读取第一数据表中的第一主键列和第二数据表中的第二主键列。
[0091 ] 进一步地,可以通过遍历第一数据表中的第一主键列,并在遍历第一主键列中的每一行时,遍历第二数据表中的第二主键列的各个行,得到组合行,将得到的组合行作为第三主键列。通过本发明上述实施例,实现了组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列。
[0092]本实施例中所提供的各个模块与方法实施例对应步骤所提供的使用方法相同、应用场景也可以相同。当然,需要注意的是,上述模块涉及的方案可以不限于上述实施例中的内容和场景,且上述模块可以运行在计算机终端或移动终端,可以通过软件或硬件实现。
[0093]从以上的描述中,可以看出,本发明实现了如下技术效果:
[0094]采用本发明实施例,在从数据库中获取待查询的目标数据对应的第一维度表、第二维度表以及指标表之后,将第一维度表和第二维度表与指标表做内联接处理得到第一数据;然后获取第一维度表的第一主键列和第二维度表的第二主键列,组合第一主键列中的第一主键和第二主键列中的第二主键得到第三主键列,并将第三主键列与第一维度表和第二维度表做内联接处理得到第二数据;合并第一数据和第二数据,即可得到目标数据。在本发明上述实施例中,将目标数据拆分为两个部分分别进行查询,通过第一维度表和第二维度表与指标表的内联接计算得到有意义的数据(即上述实施例中的第一数据),并遍历维度表补充内联接中删除的数据得到无意义的数据(即上述实施例中的第二数据),合并第一数据和第二数据得到目标数据,无需对两个维度表和指标表进行交叉联接,避免了现有技术中对维度表中无意义的维度行参与指标表的分组聚合计算,提高了获取目标数据的效率,并且使用内联接可以应用聚集索引,通过使用聚集索引可以进一步提高获取目标数据的效率。通过本发明实施例,解决了现有技术中在数据库中查询数据的效率低的问题,实现了提高查询目标数据的效率的效果。
[0095]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0096]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种数据库查询方法,其特征在于,包括: 获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表; 将所述第一维度表和所述第二维度表与所述指标表做内联接处理,得到第一数据; 获取所述第一维度表的第一主键列和所述第二维度表的第二主键列; 组合所述第一主键列的第一主键和所述第二主键列的第二主键,得到第三主键列; 将所述第三主键列与所述第一维度表和所述第二维度表做内联接处理,得到第二数据; 合并所述第一数据和所述第二数据,得到所述目标数据。
2.根据权利要求1所述的数据库查询方法,其特征在于,将所述第一维度表和所述第二维度表与所述指标表做内联接处理,得到第一数据包括: 将所述第一维度表和所述第二维度表与所述指标表做内联接处理,得到第三数据; 将所述第三数据做维度分组和指标聚合计算,得到所述第一数据。
3.根据权利要求1所述的数据库查询方法,其特征在于,将所述第三主键列与所述第一维度表和所述第二维度表做内联接处理,得到第二数据包括: 判断所述第三主键列中的第三主键是否存在于所述第一数据; 若所述第三主键列中的所述第三主键存在于所述第一数据,则舍弃所述第三主键,得到更新后的所述第三主键列; 使用更新后的所述第三主键列与所述第一维度表和所述第二维度表做内联接处理,得到第四数据; 补充所述第四数据中的指标列,得到所述第二数据。
4.根据权利要求3所述的数据库查询方法,其特征在于,补充所述第四数据中的指标列,得到所述第二数据包括: 对所述第四数据进行维度分组得到第五数据; 补充所述第五数据中的所述指标列,并使用零或空设置所述指标列的值,得到所述第二数据。
5.根据权利要求1至4中任意一项所述的数据库查询方法,其特征在于,获取所述第一维度表的第一主键列和所述第二维度表的第二主键列包括: 查询所述第一维度表中的所述第一主键列,保存所述第一主键列至第一数据表; 查询所述第二维度表中的所述第二主键列,保存所述第二主键列至第二数据表; 从所述第一数据表中读取所述第一主键列和从所述第二数据表中读取所述第二主键列。
6.一种数据库查询装置,其特征在于,包括: 第一获取模块,用于获取待查询的目标数据对应数据库中的第一维度表、第二维度表以及指标表; 第一内联接模块,用于将所述第一维度表和所述第二维度表与所述指标表做内联接处理,得到第一数据; 第二获取模块,用于获取所述第一维度表的第一主键列和所述第二维度表的第二主键列; 组合模块,用于组合所述第一主键列中的第一主键和所述第二主键列中的第二主键,得到第二主键列; 第二内联接模块,用于将所述第三主键列与所述第一维度表和所述第二维度表做内联接处理,得到第二数据; 合并模块,用于合并所述第一数据和所述第二数据,得到所述目标数据。
7.根据权利要求6所述的数据库查询装置,其特征在于,所述第一内联接模块包括: 第一内联接子模块,用于将所述第一维度表和所述第二维度表与所述指标表做内联接处理,得到第三数据; 计算模块,用于将所述第三数据做维度分组和指标聚合计算,得到所述第一数据。
8.根据权利要求6所述的数据库查询装置,其特征在于,所述第二内联接模块包括: 判断模块,用于判断所述第三主键列中的第三主键是否存在于所述第一数据; 舍弃模块,用于在所述第三主键列中的所述第三主键存在于所述第一数据的情况下,舍弃所述第三主键,得到更新后的所述第三主键列; 第二内联接子模块,用于使用更新后的所述第三主键列与所述第一维度表和所述第二维度表做内联接处理,得到第四数据; 补充模块,用于补充所述第四数据中的指标列,得到所述第二数据。
9.根据权利要求8所述的数据库查询装置,其特征在于,所述补充模块包括: 分组模块,用于对所述第四数据进行维度分组得到第五数据; 补充子模块,用于补充所述第五数据中的所述指标列,并使用零或空设置所述指标列的值,得到所述第二数据。
10.根据权利要求6至9中任意一项所述的数据库查询装置,其特征在于,所述第二获取模块包括: 第一查询模块,用于查询所述第一维度表中的所述第一主键列,保存所述第一主键列至第一数据表; 第二查询模块,用于查询所述第二维度表中的所述第二主键列,保存所述第二主键列至第二数据表; 从所述第一数据表中读取所述第一主键列和从所述第二数据表中读取所述第二主键列。
【文档编号】G06F17/30GK104392001SQ201410779290
【公开日】2015年3月4日 申请日期:2014年12月15日 优先权日:2014年12月15日
【发明者】廖小利 申请人:北京国双科技有限公司