一种数据查询的优化方法及装置与流程

文档序号:11250895阅读:438来源:国知局
一种数据查询的优化方法及装置与流程

本申请涉及计算机技术领域,尤其涉及一种数据查询的优化方法及装置。



背景技术:

随着信息技术的发展,数据库得到了广泛的应用,数据的存储量与日俱增,用户对数据库中数据的查询需求也越来越复杂。这就需要针对数据库的查询进行优化,以保证数据库在处理大量复杂的查询请求时的查询效率和质量。

目前,对于关系型数据库而言,其对数据查询的优化过程通常为:数据库接收结构化查询语言(structuredquerylanguage)查询请求,并根据该sql查询请求,生成多种执行计划(其中,执行计划是数据库针对查询请求生成的一种查询的规划,如:采用何种查询算法、多个数据表的查询次序等等),之后,数据库会根据一种称为统计信息的描述性信息(其中,统计信息是能够描述数据在数据表中的分布特征的信息),对各个执行计划可能的查询耗时和处理资源的消耗进行预测,以便选择出最优的执行计划,后续可按照该最优的执行计划进行数据查询。然而,在实际应用时,数据库会对数据表中的数据进行编辑操作(如:增加数据、删除数据、改动数据等),这样就会造成统计信息与数据表中当前的数据不符(即,统计信息出现了误差),进而会影响对执行计划的预测的准确性。

现有技术中,为了避免或降低统计信息所造成的误差而影响对执行计划预估的准确性,提出两种针对数据查询时的优化方式:

其中一种方式为:对于某查询请求所生成的多种执行计划而言,数据库将所有的执行计划均执行一遍,并获取执行每一种执行计划时的耗时、消耗的资源等信息,从而确定出最优的一种执行计划。那么,当服务器在后续过程再次 接收到同类型的查询请求后,便可以直接选用前述最优的执行计划进行数据的查询。

另一种方式为:对各数据表中的数据进行采样,得到各数据表自身的样本数据,且在采样得到的样本数据的基础上,分析出每一张数据表的统计信息。

但是,对于上述两种方式而言,均存在一定的缺陷:

在第一种方式中,执行完所有的执行计划将耗费较多的时间以及处理资源,考虑到数据库在实际应用中将面对大量的查询请求,显然,采用第一种方式将导致数据库的工作负荷过高,最终会影响查询效率,并不利于实际应用。

在第二种方式中,在得到统计信息的过程中将不执行任何的执行计划,那么,当查询请求涉及到多张数据表的情况下,数据库只能够分别根据每一张数据表自身的统计信息,对执行计划进行预测,这样就可能造成根据不同数据表的统计信息预测出不同的最优执行计划的现象,显然,会对数据库在选择最优执行计划的过程中造成干扰。也就是说,上述的第二种方式只适用于单一数据表的执行计划的预测,如果查询时涉及到多张数据表,那么,使用第二种方式将不能有效得到针对多张数据表全局的统计信息。



技术实现要素:

本申请实施例提供一种数据查询的优化方法,用以解决现有的数据查询优化的过程中实用性较差的问题。

本申请实施例提供的一种数据查询的优化方法,应用于关系型数据库,该方法包括:

接收数据查询请求;

确定所述数据查询请求所对应的待查询数据的属性信息以及各数据表;

根据所述属性信息,分别在各数据表中进行采样,得到各数据表对应的样本数据;

根据所述样本数据,生成基于所有样本数据的样本执行计划;

执行该样本执行计划,并根据执行结果,获取针对所有样本数据的样本统计信息;

根据所述样本统计信息,生成针对各数据表的全局统计信息;

根据各数据表,生成基于各数据表的各全局执行计划;

根据所述全局统计信息,确定各全局执行计划中的最优全局执行计划。

本申请实施例提供的一种数据查询的优化装置,应用于关系型数据库,该装置包括:

接收模块,用于接收数据查询请求;

确定模块,用于确定所述数据查询请求所对应的待查询数据的属性信息以及各数据表;

采样模块,用于根据所述属性信息,分别在各数据表中进行采样,得到各数据表对应的样本数据;

样本执行计划模块,用于根据所述样本数据,生成基于所有样本数据的样本执行计划;

样本统计信息模块,用于执行该样本执行计划,并根据执行结果,获取针对所有样本数据的样本统计信息;

全局统计信息模块,用于根据所述样本统计信息,生成针对各数据表的全局统计信息;

全局执行计划模块,用于根据各数据表,生成基于各数据表的各全局执行计划;

查询模块,用于根据所述全局统计信息,确定各全局执行计划中的最优全局执行计划。

本申请实施例提供一种数据查询的优化方法及装置,通过该方法,当数据库接收到数据查询请求后,将确定出该查询请求所对应的待查询数据的属性信息和各数据表,并根据属性信息在各数据表中进行采样,得到各数据表所对应的样本数据,进一步在采样得到的样本数据的基础上,生成针对所有样本数据 的样本执行计划,也即,此时的样本执行计划将以所有样本数据为基础,故数据库将在样本数据中“尝试”执行数据的查询操作,经过这样的“尝试”,可以得到针对所有样本数据的样本统计信息,而样本统计信息反映了样本数据中的数据分布特征,如果样本数据的数量足够充分,那么,样本数据中的数据分布特征也就能够反映出总体数据中的数据分布特征,所以,可进一步根据样本统计信息得到针对各数据表的全局统计信息。在此基础上,数据库可针对各数据表生成全局执行计划,并根据得到的全局统计信息,在各全局执行计划中预测出最优的全局执行计划。通过本方法,针对采样得到的样本数据执行样本执行计划,可以得到针对所有样本数据的样本统计信息,与现有技术中针对每一张数据表生成该数据表的统计信息的方式不同,本方法中的所生成的样本统计信息,是针对所有的样本数据,能够反映出所有样本数据下数据的分布特征,同时,针对样本数据生成样本统计信息的过程,可有效减少数据量,并可进一步降低处理资源的消耗。而依据此生成的全局统计信息也能够更加精确地反映出总体数据下数据的分布特征,从而可以准确地在全局执行计划中确定出最优的全局执行计划。本申请的上述方法既适用于涉及多数据表的查询请求,也适用于针对单一数据表的查询请求,实用性强,且查询结果准确。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的数据查询的优化过程;

图2a为本申请实施例提供的样本执行计划的示意图;

图2b为本申请实施例提供的全局执行计划的示意图;

图3为本申请实施例提供的数据查询的优化装置结构示意图。

具体实施方式

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

本申请实施例所提供的一种数据查询的优化方法,应用于关系型数据库(如:oracle、db2、mysql等数据库),具体而言,如图1所示,该方法具体包括以下步骤:

s101,接收数据查询请求。

当用户需要进行数据的查询时,便可以向数据库(本申请实施例中的数据库为关系型数据库)发出相应的查询请求,作为本申请实施例中的一种方式,用户针对关系型数据库所发出的数据查询请求可以是采用sql语句的数据查询请求。在实际应用时,用户可通过相应的终端向数据库发出数据查询请求,也可以在数据库中直接输入数据查询请求,这里并不构成对本申请的限定。

s102,确定所述数据查询请求所对应的待查询数据的属性信息以及各数据表。

用户所发出的数据查询请求表明了用户所需要查询的数据(即,待查询数据),通常,在数据查询请求是sql请求的场景下,sql语句中会包含用户所要查询的数据的属性信息,以及所要查询的数据表,例如:假设用户所发出的数据查询请求的sql语句为“select学号froma”,该数据查询请求表示用户要在数据表a中查询“学号”这一属性的数据。当然,在实际应用时,用户所要查询的数据可能分布在多张数据表中,也即,用户所发出的数据查询请求将对应于多张数据表,所以,数据库会确定出数据查询请求所对应的所有数据表,以便于后续操作。

需要说明的是,数据查询请求所对应的数据表可能是大型数据表,也就是 说,该数据表中可能存储有几十万至上百万数量级的数据,显然,若在后续过程中,直接针对这样具有大量数据的数据表生成执行计划,将会消耗大量的处理资源,同时,也考虑到数据库针对该数据表所生成的统计信息可能存在一定的误差,若以该数据表的统计信息对执行计划进行预测,会影响预测的准确性。

基于此,在本申请实施例中,使用对数据表进行采样的方式,以缩减数据量,也即,执行下述步骤s103。

s103,根据所述属性信息,分别在各数据表中进行采样,得到各数据表对应的样本数据。

正如前述,待查询数据的属性可能分布在多张数据表中,为了降低过大的数据量所带来的处理资源的消耗,可针对每一张数据表进行采样,即,将各数据表中包含该属性信息的数据采集出来,形成对应于每一张数据表的样本数据(通常,针对各数据表采样得到的样本数据会以临时表的方式存储)。当然,如果在数据查询请求中只涉及到一张数据表的情况下,那么,就只对该数据表进行采样,并生成该数据表所对应的样本数据。

在实际应用过程中,采样的数据数量和具体的采样方式将根据实际应用的需要进行设置,例如:针对某张数据表,可以进行随机采样,也可以进行均匀采样等等,这里并不构成对本申请的限定。

s104,根据所述样本数据,生成基于所有样本数据的样本执行计划。

经过上述的采样过程后,针对每一张数据表,均生成了对应于该数据表的样本数据,与现有技术中不同的是,数据库会针对采样得到的各数据表所对应的样本数据,生成样本执行计划。也即,此时数据库所生成的执行计划是针对全部样本数据的。

需要说明的是,数据库针对全部样本数据可以仅生成一种样本执行计划,而不需要生成多种执行计划。同时,数据库所生成的样本执行计划也可以不是最优的执行计划,这样一来,在减少了数据量的同时,也简化了生成多种样本执行计划的繁琐操作,从而可有效降低数据库的处理资源的消耗。可以认为, 数据库针对全部样本数据所生成的样本执行计划是一种“尝试”,用以获得针对样本数据的样本统计信息,也即,执行下述步骤s105。

s105,执行该样本执行计划,并根据执行结果,获取针对所有样本数据的样本统计信息。

在全部样本数据的基础上执行上述的样本执行计划,就可以得到针对所有样本数据的统计信息,例如:假设针对采样得到的两张临时表而言,数据库针对这两张临时表的执行计划为:对这两张临时表进行表连接操作,并在表连接操作后得到的数据中查询属性值相同的数据的个数。在本实例中,经过执行样本执行计划的过程,可以使得两张临时表进行表连接,而查询得到的属性值相同的数据的个数,就是针对两张临时表的样本统计信息。

显然,与现有技术不同的是,正是执行了样本执行计划,便可在采集的所有样本数据的基础上,获得针对所有样本数据的样本统计信息,而非每一张数据表各自的统计信息。

此外,从上述示例中可知,样本统计信息,描述了样本数据中的数据分布特性,那么,也就可以进一步得到总体数据中的数据分布特性。

s106,根据所述样本统计信息,生成针对各数据表的全局统计信息。

针对样本数据而生成的样本统计信息,可在一定程度上反映出数据在各数据表(总体数据)中的分布特征,那么,也就可以根据样本统计信息,得到针对各数据表的全局统计信息。例如:假设数据库的某数据表内存储了某大学大一级学生的数据,对样本数据,其中的样本统计信息为“性别为男性的学生的占比”,假设该占比的比值为50%,如果样本数据的数量足够大,那么,就可以认为,该样本数据的样本统计信息可反映总体数据中的分布特性,也即,在大一级的所有学生中,男性学生的占比为50%。当然,这里的示例并不构成对本申请的限定。

s107,根据所述全局统计信息,在预先针对各数据表生成的各全局执行计划中,最优全局执行计划。

作为本申请实施例中的一种方式,数据库可以预先针对各数据表生成各全局执行计划,当数据库接收到数据查询请求后,可以从已经生成的各全局执行计划中,挑选出与数据查询请求相符合的多种全局执行计划。或者,作为本申请实施例中的另一种方式,数据库可以在接收到了数据查询请求后,根据该数据查询请求中的查询语句,针对各数据表生成符合该查询语句的各全局执行计划。以上两种方式并不构成对本申请的限定。

本申请实施例中的全局统计信息,是经过前述的采样、执行样本执行计划等步骤而得到的,可以认为,此时的全局统计信息中的取值,能够更加准确的反映出总体数据下各数据的分布特征,因而,也就可以更加准确地对多种全局执行计划进行预测,选择出最优的全局执行计划。当然,在实际应用场景下,可以根据前述的最优的全局执行计划,在各数据表中查询用户所需的待查询数据,以便生成相应的查询结果。这里并不构成对本申请的限定。

通过上述步骤,当数据库接收到数据查询请求后,将确定出该查询请求所对应的待查询数据的属性信息和各数据表,并根据属性信息在各数据表中进行采样,得到各数据表所对应的样本数据,进一步在采样得到的样本数据的基础上,生成针对所有样本数据的样本执行计划,也即,此时的样本执行计划将以所有样本数据为基础,故数据库将在样本数据中“尝试”执行数据的查询操作,经过这样的“尝试”,可以得到针对所有样本数据的样本统计信息,而样本统计信息反映了样本数据中的数据分布特征,如果样本数据的数量足够充分,那么,样本数据中的数据分布特征也就能够反映出总体数据中的数据分布特征,所以,可进一步根据样本统计信息得到针对各数据表的全局统计信息。在此基础上,数据库可针对各数据表生成全局执行计划,并根据得到的全局统计信息,在各全局执行计划中预测出最优的全局执行计划,从而以此最优的全局执行计划来查询用户所需的待查询数据,最后生成查询结果。通过本方法,针对采样得到的样本数据执行样本执行计划,可以得到针对所有样本数据的样本统计信息,与现有技术中针对每一张数据表生成该数据表的统计信息的方式不同,本 方法中的所生成的样本统计信息,是针对所有的样本数据,能够反映出所有样本数据下数据的分布特征,同时,针对样本数据生成样本统计信息的过程,可有效减少数据量,并可进一步降低处理资源的消耗。而依据此生成的全局统计信息也能够更加精确地反映出总体数据下数据的分布特征,从而可以准确地在全局执行计划中确定出最优的全局执行计划。本申请的上述方法既适用于涉及多数据表的查询请求,也适用于针对单一数据表的查询请求,实用性强。

针对前述内容中的采样过程而言,样本数据通常以临时表的方式体现,也即,针对前述步骤s103,根据确定出的所述属性信息,分别在各数据表中进行采样,得到属于所述各数据表且包含所述属性信息的样本数据,具体包括:分别确定所述属性信息所属的所有数据表,针对确定出的任一数据表,采集设定数量的、且包含有所述属性信息的数据构建临时表,将所述临时表中的数据作为所述数据表的样本数据。

如:针对某数据表a,其中包含了公司人员的数据,而如果查询请求中所对应的属性信息包括:身高。那么便可以依据该属性信息,从数据表a中进行采样。采样得到的样本数据必然包含该“身高”这一属性信息,但样本数据并非是包含有该数据信息的全部数据,可以是部分数据。结合该示例而言,采样出的样本数据,只是部分身高数据,并非所有身高数据。例如在数据表中包含的身高为170cm的人员为100个,那么采样出来的数据里包含的身高为170cm的人员可能为10个。

得到了样本数据后,便可以针对样本数据生成样本执行计划,需要说明的是,在实际应用场景下,数据查询请求中通常会包含相应的查询条件,服务器可以依据不同的查询条件生成不同的执行计划,具体而言,在本申请实施例中,根据所述样本数据,生成基于所有样本数据的样本执行计划,具体包括:根据所述数据查询请求中的查询语句,针对所述样本数据,生成基于所有样本数据的一个样本执行计划。

生成的该样本执行计划只针对所有的样本数据,并非针对各数据表中的数据,这样的方式可以有效减少数据量,降低处理资源的消耗。针对样本数据执行了该样本执行计划后,便可以得到样本统计信息。

需要说明的是,在本申请实施例中,统计信息(即包括样本统计信息,也包括全局统计信息)通常分为两类,一类是满足某种条件的数据的占比(也称为选择率),另一类是数据的区别值的个数。

对于第一类而言,上述步骤s105中,获取针对所有样本数据的样本统计信息,具体包括:在执行了所述样本执行计划的所有样本数据中,统计满足所述查询语句的查询条件的数据在所有样本数据中的占比,将所述占比作为所述样本统计信息。

在此基础上,对于上述步骤s106而言,根据所述样本统计信息,生成针对所述数据表的全局统计信息,具体包括:将所述占比,作为在所述数据表内的所有数据中的占比。

正如前述示例中所示的,在样本数据中得到的样本统计信息为男性学生的占比为50%,如果该样本数据的数量足够充分,那么,便可以将这个占比看作是整个大一级学生中,男性学生的占比。

对于第二类而言,上述步骤s105中,获取针对所有样本数据的样本统计信息,具体包括:在执行了所述样本执行计划的所有样本数据中,针对所述属性信息所对应的所有属性值,统计不相同的属性值的数量以及相同的属性值的数量,将统计得到的不相同的属性值的数量以及相同的属性值的数量,作为所述样本统计信息。

在此基础上,对于上述步骤s106而言,根据所述样本统计信息,生成针对所述数据表的全局统计信息,具体包括:

按照预定规则,对统计得到的所述不相同的属性值的数量以及相同的属性值的数量进行修正,以便表征各数据表中不相同的属性值的数量以及相同的属性值的数量,将修正后的不相同的属性值的数量以及相同的属性值的数量,作 为全局统计信息。

在这里举例进行说明:下文以及本示例中,可将不相同的属性值的数量称为distinct数量,将相同的属性值的数量称为multiple数量。

本示例中的预定规则,可以包括:

1、如果样本的multiple数量为0,则总体distinct数量为总体数据总数。

例如:假设在样本数据中,“身高”这一属性的取值均不相同(即,multiple数量为0),如果样本数据的数量足够充分,那么,可以认为,在总体数据中,“身高”这一属性的取值都是不相同的。也就是说,总体distinct数量为总体数据总数。

2、如果样本的multiple数量和distinct数量相等,则总体distinct数量和样本的distinct数量相等。

3、否则,在不满足上述两条规则的情况下,则总体distinct数为总体数据数×distinct率,其中distinct率=样本distinct数/样本数据总数。

通过上述的预设规则,便可以根据样本统计信息来推测出总体数据下的全局统计信息。当然,上述所列举出的预设规则并不构成对本申请的限定。

下面以一具体应用实例,来说明本申请中的上述数据查询的优化方法。

假设,数据库所接收到的数据查询请求为:“selecta2froma,bwherea1=b1anda2like‘%a%’”。其中,a和b代表数据表a和数据表b;a1、a2是数据表a的属性,b1是数据表b的属性;该数据查询请求中包含两个查询条件:a1=b1(表示a1的值和b1的值相等),以及a2like‘%a%’(表示a2中包含有“a”这个字符,对于这个条件,数据库通常是估计不准确的)。并假设,数据表a和b各自有1百万条数据。

此时,如果直接在数据表a和b中进行查询优化操作(预测最优的执行计划),那么,由于数据库对条件a2like‘%a%’的选择率估计并不准确,这就会导致对执行计划的预测也不准确(不能确定出最优的执行计划),在这样的 情况下,若直接在这样大量的数据下根据执行计划进行数据的查询操作,必然将消耗大量的处理资源、消耗较长的处理时间。

故在本场景下,可采用本申请的上述优化方法:

步骤一,在数据表a和b上进行采样。

假设,分别在数据表a和b上采样30000行数据,采样时只采集涉及到的属性a1、a2、和b1,以减少数据规模,生成临时表temp_a和temp_b。

步骤二,针对采样得到的临时表,生成基于各临时表的样本执行计划。

在采样得到的两张临时表的基础上,假设生成的样本执行计划是分别对temp_a和temp_b进行排序后做merge-join,以便进行查询“selecta1fromtemp_a,temp_bwherea1=b1anda2like‘%a%’”(这里可见,该样本执行计划只针对临时表temp_a和temp_b)。具体如图2a所示,其中,图2a中示出了该样本执行计划的过程(也可以看作是该样本执行计划的结构,其执行顺序由下而上),具体地,首先针对temp_a,按照条件a2like‘%a%’筛选数据,并进一步,针对属性a1进行查询;同时,针对temp_b,根据属性b1进行查询;之后,进行两个临时表的连接操作(即,merge-join)。

步骤三,执行上述的样本执行计划,获取针对两个临时表的样本统计信息。

执行了上述的样本执行计划,便可以获取到temp_a的条件a2like‘%a%’的选择率,且在该条件下属性a1和a2的distinct数量和multiple数量;temp_b中属性b1的distinct数量和multiple数量;以及条件a1=b1的选择率等样本统计信息。

假设,在本示例中,获取到的样本统计信息包括:

a2like‘%a%’的选择率为1/1000;

temp_a的a1属性的distinct为1000,multiple为0;

temp_a的a2属性的distinct为100,multiple为100;

temp_b的b1属性的distinct率为1;

a1=b1的选择率为1/1000000;

temp_ajointemp_b的中间结果(临时表a与临时表b进行连接后,生成的二者之间的临时表)的a2属性的distinct为100,multiple为100。。

步骤四,根据样本统计信息,生成针对数据表a和b的全局统计信息。

按照预设规则,可将前述的样本统计信息,转换为针对总体数据的全局统计信息,这里假设转换后的全局统计信息包括:

a2like‘%a%’的选择率为1/1000;

a1=b1的选择率为1/1000000;

数据表a经条件a2like‘%a%’过滤之后的数据量为1000;

数据表b的数据量为1000000;

数据表ajoin数据表b的数据量为1000(即,数据表a和b进行连接后,受条件“a2like‘%a%’”的作用,使得二者之间的临时表中的数据量为1000);

数据表a的属性a1的distinct数量为1000;

数据表a的属性a2的distinct数量为100;

数据表ajoin数据表b的后属性a2的distinct数量为100。

步骤五,根据所述全局统计信息,确定最优全局执行计划,并根据最优全局执行计划在数据表a和b中进行数据查询,生成查询结果。

例如:数据表a经条件a2like‘%a%’过滤之后仅剩余1000条数据,并且连接涉及的属性a1的distinct数量也为1000,在该数据量的情况下,适合进行哈希连接hash-join。也即,可以针对数据表a和b,执行hash-join,具体的执行计划如图2b所示。

至此,通过本申请中的上述方法,便可以针对任一查询请求,通过采样的方式,获得样本数据,并在样本数据的基础上,执行样本执行计划,以获取到样本统计信息,此时的样本统计信息可以较为准确地反映出数据的分布特性,也就可以进一步根据样本统计信息估计全局数据的分布特性,即得到全局统计数据,从而可以根据全局统计信息来预测最优的全局执行计划。这样的方式无需执行所有的执行计划,保证了处理资源的消耗较低,同时,所获得的全局统 计信息的准确性较高,使得能够准确预测出最优的执行计划。

当然,在本申请实施例中,若所述数据查询请求所对应的数据表的数量大于1,则所述执行计划可以包括针对各数据表的连接操作,以及按照所述数据查询请求中的查询语句,在连接后的数据表中进行数据查询。

其中,所述连接操作可以包括:哈希连接hashjoin、嵌套循环连接nestedloopjoin、归并连接mergejoin中的至少一种。

此外,若所述数据查询请求所对应的数据表的数据量为1,则所述执行计划包括针对该数据表是否选取索引,以及选取合理的索引进行数据查询。当然,这里并不构成对本申请的限定。

基于同样的思路,本申请实施例还提供一种数据查询的优化装置,如图3所示。

在图3中,所述数据查询的优化装置包括:

接收模块301,用于接收数据查询请求。

确定模块302,用于确定所述数据查询请求所对应的待查询数据的属性信息以及各数据表。

采样模块303,用于根据所述属性信息,分别在各数据表中进行采样,得到各数据表对应的样本数据。

样本执行计划模块304,用于根据所述样本数据,生成基于所有样本数据的样本执行计划。

样本统计信息模块305,用于执行该样本执行计划,并根据执行结果,获取针对所有样本数据的样本统计信息。

全局统计信息模块306,用于根据所述样本统计信息,生成针对各数据表的全局统计信息。

全局执行计划模块307,用于根据所述全局统计信息,在预先针对各数据表生成的各全局执行计划中,确定最优全局执行计划。

在本申请实施例中,采样模块303,具体用于分别确定所述属性信息所属 的所有数据表,针对确定出的任一数据表,采集设定数量的、且包含有所述属性信息的数据构建临时表,将所述临时表中的数据作为所述数据表的样本数据。

在本申请实施例中,样本执行计划模块304,具体用于根据所述数据查询请求中的查询语句,针对所述样本数据,生成基于所有样本数据的一个样本执行计划。

进一步地,作为本申请实施例中的一种方式,样本统计信息模块305,具体用于在执行了所述样本执行计划的所有样本数据中,统计满足所述查询语句的查询条件的数据在所有样本数据中的占比,将所述占比作为所述样本统计信息。

在此基础上,全局统计信息模块306,具体用于将所述占比,作为在所述数据表内的所有数据中的占比。

作为本申请实施例中的另一种方式,样本统计信息模块305,具体用于在执行了所述样本执行计划的所有样本数据中,针对所述属性信息所对应的所有属性值,统计不相同的属性值的数量以及相同的属性值的数量,将统计得到的不相同的属性值的数量以及相同的属性值的数量,作为所述样本统计信息。

基于此,全局统计信息模块306,具体用于按照预定规则,对统计得到的所述不相同的属性值的数量以及相同的属性值的数量进行修正,以便表征各数据表中不相同的属性值的数量以及相同的属性值的数量,将修正后的不相同的属性值的数量以及相同的属性值的数量,作为全局统计信息。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序 的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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