CN113076332B - 一种数据库预编译查询语句的执行方法 - Google Patents
一种数据库预编译查询语句的执行方法 Download PDFInfo
- Publication number
- CN113076332B CN113076332B CN202110317694.1A CN202110317694A CN113076332B CN 113076332 B CN113076332 B CN 113076332B CN 202110317694 A CN202110317694 A CN 202110317694A CN 113076332 B CN113076332 B CN 113076332B
- Authority
- CN
- China
- Prior art keywords
- query statement
- execution plan
- execution
- precompiled
- database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000008859 change Effects 0.000 claims description 7
- 230000001172 regenerating effect Effects 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000000638 solvent extraction Methods 0.000 claims 1
- 238000005457 optimization Methods 0.000 abstract description 7
- 230000004044 response Effects 0.000 abstract description 3
- 230000000875 corresponding effect Effects 0.000 description 81
- 230000004048 modification Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 238000007781 pre-processing Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2452—Query translation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库预编译查询语句的执行方法,属于数据库技术领域。收到用户发送的预编译查询语句后,先分析占位符所对应的关系表属性,获得可能会生成不同执行计划的参数值;再将参数值逐一代入占位符所在位置,提前生成执行计划。当用户传入要查询的参数值后,先计算该参数值所对应的选择率,再从缓存中取出预编译查询语句和选择率区间都对应的执行计划,并将用户传入的参数值代入执行计划。从而省略查询优化模块生成执行计划的时间,降低查询语句的执行时间,提高数据库响应速度。另外,在每次得到用户传入的参数值后,先判断是否达到了更新执行计划的条件。满足条件时,会重新生成预编译查询语句的执行计划,以此保证执行计划的有效性。
Description
技术领域
本发明涉及数据库技术领域,具体来说,涉及一种数据库预编译查询语句的执行方法。
背景技术
数据库系统是为适应数据处理的需要而发展起来的一种数据处理系统。通常情况下查询语句在数据库上的执行会经历以下模块:语法分析模块、查询预处理模块、查询优化模块以及查询执行模块。但是在很多情况下,用户会反复执行多次类似的查询语句,这些查询语句之间只有个别的参数值不同,例如如下两条查询语句:
查询语句1:select*from student where grade<60;
查询语句2:select*from student where grade<80;
容易看出,这两条查询查询语句只有最后的参数值不同。如果数据库每次在执行这些类似的查询语句时,都需要完整地经历上面四个模块,将会极大地影响数据库的执行效率。为此,数据库引入了预编译功能。所谓预编译就是先将这些类似的查询语句中不同的参数值(查询语句1中的60和查询语句2中的80)用占位符来代替。数据库查询语句中使用符号‘?’来表示占位符,将上述的语句中的参数值用占位符表示以后,查询语句可以表示成如下形式:
select*from student where grade<?;
然后就可以将该语句提交给数据库进行编译处理,接下来用户只需要输入具体的参数值(例如输入参数值60或80)就可以等待数据库执行并获取相应的结果。预编译查询语句的优势在于一次编译、多次运行,可以省略语法分析和查询预处理模块。收到用户发送的预编译查询语句之后,数据库只需等待用户将占位符上对应的参数值传入就可以继续通过查询优化模块生成对应的执行计划,进而通过查询执行模块得到对应的查询结果。
尽管数据库的预编译功能能够提高查询语句的执行效率,但是这种方法还是会在一定程度上影响查询语句的执行效率。那就是在等待参数值传入的时间内,该功能并不会生成执行计划。只有在接收到用户传入的参数值后,数据库才会调用查询优化模块生成对应参数下的执行计划,这就会造成时间资源上的浪费。
发明内容
针对上述现有技术存在的问题,本发明提出一种数据库预编译查询语句的执行方法,旨在进一步提高查询语句的执行效率,降低查询语句的执行时间,提高数据库的性能和响应速度。
本发明的技术方案是:
一种数据库预编译查询语句的执行方法,包括如下步骤:
步骤1:获取用户输入的预编译查询语句;
步骤2:将该预编译查询语句转化为语法查询树;
步骤3:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的参数值,并确定每一参数值所对应的选择率;同时,初始化该预编译查询语句对应的执行计划更新阈值;
步骤4:将从步骤3获得的各参数值逐一代入到该预编译查询语句中,依次获得与各参数值相对应的执行计划,并根据各参数值所分别对应的选择率划分出与各执行计划一一对应的选择率区间;
步骤5:将步骤4生成的与各选择率区间相对应的执行计划进行去重处理且对应地对选择率区间进行合并处理,并将处理后的选择率区间和执行计划进行缓存;
步骤6:判断用户是否输入参数值及该预编译查询语句所要查询的关系表是否发生了数据改变,若用户未输入参数值,而该预编译查询语句所要查询的关系表发生了数据改变,则令执行计划更新阈值减去关系表中发生数据改变的行数,执行计划更新阈值得到相应的更新,若用户输入参数值,则执行步骤7;
步骤7:获取用户输入的参数值;
步骤8:判断该预编译语句对应的执行计划更新阈值是否大于0,若是,则执行步骤10,若否,则执行步骤9;
步骤9:按照步骤2至步骤5的方法,重新生成预编译查询语句对应的执行计划并转至步骤10;
步骤10:计算用户输入的参数值所对应的选择率;
步骤11:根据步骤10得到的选择率,从缓存中取出与预编译查询语句和选择率区间都对应的执行计划;
步骤12:将从步骤11中获得的执行计划中的参数值替换为用户传入的参数值后,执行该执行计划。
进一步地,根据所述的数据库预编译查询语句的执行方法,步骤3包括如下步骤:
步骤3.1:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的不同参数值,并确定每一参数值所对应的选择率;
步骤3.1.1:根据用户传入的预编译查询语句,修改并更新数据库中的直方图信息;
步骤3.1.2:获得该预编译查询语句中占位符所对应的属性的直方图边界,将直方图边界值作为可能会生成不同执行计划的参数值,并确定每一参数值所对应的选择率,这些参数值构成参数值集合;
步骤3.2:根据该预编译查询语句所查询的关系表的行数,初始化该预编译查询语句对应的执行计划更新阈值。
进一步地,根据所述的数据库预编译查询语句的执行方法,步骤3.1.1中所述的修改并更新数据库中的直方图信息的方法为:先执行语句1:“alter table‘table’alter‘col’set statistics‘N’;”,再执行语句2:“analyze‘table’;”。
进一步地,根据所述的数据库预编译查询语句的执行方法,步骤3.1.2中所述的获得预编译查询语句中占位符所对应的属性的直方图边界的方法为:数据库执行语句“select histogram_bounds from pg_stats where tablename='table'and attname='col';”。
进一步地,根据所述的数据库预编译查询语句的执行方法,步骤3.2所述的初始化该预编译查询语句对应的执行计划更新阈值的方法为:首先获取关系表的行数,若该预编译查询语句中所查询的关系表有多个,则获取多个关系表的行数,然后用关系表中行数最少的关系表行数乘以系数k,其中0<k≤1,所得的乘积作为该预编译查询语句所对应的执行计划更新阈值的初始值。
进一步地,根据所述的数据库预编译查询语句的执行方法,在步骤4中选择率区间的划分规则为:首先将步骤3中得到与各参数值所对应的选择率按照大小顺序排序;然后将每两个相邻选择率进行取平均计算,所得的各平均值与选择率最大值和选择率最小值一起再按照大小顺序排序,得到一个新的组合;再然后从该组合中将每两个相邻值取出作为一个选择率区间,将得到选择率区间逐一分配给对应的执行计划。
与现有技术相对比,本发明数据库预编译查询语句的执行方法具有如下有益效果:能够令数据库充分利用预编译查询语句后等待用户传入参数值的时间,提前生成执行计划,这样就可以在得到用户传入的参数值后不经过查询优化模块直接选取执行计划,省略查询优化模块生成执行计划的时间,从而进一步地提高查询语句的执行效率,降低查询语句的执行时间,提高数据库的性能和响应速度。另外,为了保证执行计划的有效性,本发明在每次得到用户传入的参数值后,先判断是否达到了更新执行计划的条件。满足条件时,会重新生成预编译查询语句的执行计划,以此保证执行计划的有效性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明中所需要使用的附图作简单地介绍。
图1为本发明数据库预编译查询语句的执行方法流程图;
图2为本发明方法中步骤3.1的流程图;
图3为本发明方法中步骤10的流程图。
具体实施方式
为了便于理解本申请,下面将参照相关附图对本申请进行更全面的描述。附图中给出了本申请的较佳实施方式。但是,本申请可以以许多不同的形式来实现,并不限于本文所描述的实施方式。相反地,提供这些实施方式的目的是使对本申请的公开内容理解的更加透彻全面。
本发明的核心思想在于接收到用户发送的预编译查询语句后,首先利用数据库中关系表的统计信息以及直方图对占位符所对应的关系表的属性进行分析,获得可能会生成不同执行计划的参数值集合。然后将所得到的参数值集合中的参数值代入预编译查询语句中占位符所在位置,提前生成执行计划。在这个过程中,本发明会将生成的执行计划以及其对应的选择率区间进行缓存。当用户传入要查询的参数值后,首先计算该参数值所对应的选择率(Selectivity),然后从缓存中取出预编译查询语句和选择率区间都对应的执行计划,并且将用户传入的参数值代入执行计划。数据库将执行该执行计划并将执行结果返回给用户。为了保证执行计划的有效性,每次在得到用户传入的参数值后,本发明都会判断是否达到了更新执行计划的条件。满足条件时,会重新生成预编译查询语句的执行计划,以此保证执行计划的有效性。
根据上述本发明的核心思想,本发明提供一种数据库预编译查询语句的执行方法,图1示出的是该方法的流程图,下面将结合图1和优选实施例的数据库预编译查询语句“select*from student where grade<?;”对该方法实施的具体步骤做进一步详细描述。该方法具体包括如下步骤:
步骤1:获取用户输入的预编译查询语句。
预编译查询语句指的是数据库查询语句中用占位符‘?’来代替参数值的查询语句,例如,优选实施例的数据库查询语句“select*from student where grade<?;”就是一个预编译查询语句,预编译查询语句需要用户传入参数值代入占位符所在位置后才可以返回查询结果。
步骤2:对用户输入的预编译查询语句进行语法分析和查询预处理,将其转化为语法查询树。
数据库提供了语法分析模块以及查询预处理模块。通过语法分析模块可以将查询语句转化为语法查询树。查询预处理模块则会基于关系代数转换和启发式规则,对查询语句进行进一步优化。该内容属于现有技术,在此不再详述。
步骤3:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的参数值,并确定每一参数值所对应的选择率;同时,根据该预编译查询语句所查询的关系表的行数,初始化该预编译查询语句对应的执行计划更新阈值。
步骤3.1:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的不同参数值,并确定每一参数值所对应的选择率。
在数据库中,选择率会对生成的执行计划有影响,不同的选择率可能会生成不同的执行计划。选择率是指施加指定谓词条件后返回结果集的记录数占未施加任何谓词条件的原始结果集的记录数的比率。通俗来讲,就是所要查询的数据占全部数据的比例,例如,有一张学生成绩的记录表,成绩均匀分布在0-100之间,小于0的成绩对应的选择率就是0%,小于95的成绩由于数据假定均匀分布,对应的选择率就是95%。本步骤的目的就是获得对于预编译查询语句有着不同选择率的参数值,如图2所示,本步骤进一步包括如下步骤:
步骤3.1.1:根据用户传入的预编译查询语句,修改并更新数据库中的直方图信息。
具体实施方式为数据库先执行语句1:“alter table‘table’alter‘col’setstatistics‘N’;”,再执行语句2:“analyze‘table’;”。
语句1的含义是要修改数据库中关系表‘table’的属性‘col’的直方图信息,‘N’表示要将直方图分为N个桶。对于语句中的关系表‘table’和属性‘col’,需要根据不同的预编译查询语句,进行相应的修改,桶的个数‘N’也是由用户自行设置。语句2表示更新关系表‘table’的全部属性的直方图信息。如果预编译查询语句中有多个占位符,这些语句也将会执行多条,对预编译查询语句中占位符所对应属性的直方图信息进行修改并更新。
在现代数据库系统中,直方图被引入元数据统计信息中,描述表中属性的数据分布。直方图会根据边界[b1,b2…bn]将属性分为若干份,直方图间隔也被称为桶。直方图又可以分为两种类型,等宽直方图和等深直方图,等深直方图指的是每个桶中含有的数据数量是一致的(但是边界值之间的间隔可能不同)。本步骤的实现依赖于数据库中的等深直方图,需要对数据库中的直方图信息进行修改,具体实施方式为提供接口由用户自行设置桶的个数N。对于优选实施例,需要对占位符所对应关系表student中的属性grade进行分析。为了简化问题,优选实施例中设置直方图中桶的个数N为10。为此,数据库先执行语句1:“alter table student alter grade set statistics 10;”,该语句的含义为修改关系表student中属性grade的直方图信息,将其分为10桶,由于每个桶中含有的数据数量一致,所以每个桶中的数据会是全部数据的十分之一。然后执行语句2:“analyze student;”,该语句的含义为更新关系表student的全部属性的直方图信息,包括优选实施例中用到的属性grade。
步骤3.1.2:获得预编译查询语句中占位符所对应的属性的直方图边界,将直方图边界值作为可能会生成不同执行计划的参数值,并确定每一参数值所对应的选择率,这些参数值构成参数值集合。
具体实施方式为数据库执行语句“select histogram_bounds from pg_statswhere tablename='table'and attname='col';”。该语句的含义是要获得数据库中关系表‘table’的属性‘col’的直方图边界[b1,b2…bn],对于‘table’和‘col’,同样需要根据预编译查询语句的不同进行相应改变。
对于优选实施例,数据库执行查询语句“select histogram_bounds from pg_stats where tablename='student'and attname='grade';”即可获取关系表student中属性grade的直方图边界,如表1所示:
表1关系表student中属性grade的直方图边界
histogram_bounds |
[0,50,60,65,70,75,80,85,90,95,100] |
查询结果[0,50,60,65,70,75,80,85,90,95,100]就是关系表student中属性grade的直方图边界。该结果表示将属性grade的分布分成了10个桶,每个桶所占总数量的比例是相同的,即将grade的整个取值范围分为10个组,每个组占grade整个取值范围的比例是相同的,都是1/10。查询结果的含义如表2所示。
表2关系表student中属性grade的分布
桶/组序号 | grade取值范围 | 数据占比 |
1 | 0至50 | 0.1 |
2 | 50至60 | 0.1 |
3 | 60至65 | 0.1 |
4 | 65至70 | 0.1 |
5 | 70至75 | 0.1 |
6 | 75至80 | 0.1 |
7 | 80至85 | 0.1 |
8 | 85至90 | 0.1 |
9 | 90至95 | 0.1 |
10 | 95至100 | 0.1 |
若将该直方图边界[0,50,60,65,70,75,80,85,90,95,100]中的值0代入优选实施例的预编译查询语句“select*from student where grade<?;”中的占位符位置,其所代表的含义是查询小于0的成绩,由表2可知,没有小于0的成绩,所以值0所对应的选择率为0,若将其中的值60代入上述占位符位置,其所代表的含义是查询小于60的成绩,由表2可知,小于60的成绩对应的grade取值范围为1组的0至50以及2组的50至60,所以60所对应的选择率为0.2。同理可得,直方图边界[0,50,60,65,70,75,80,85,90,95,100]对应的选择率为[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0]。由于这些值在实施例中的选择率不同,会生成不同的执行计划,所以直方图边界[0,50,60,65,70,75,80,85,90,95,100]中的值就构成了所要获取的会生成不同执行计划的参数值集合。
步骤3.2:根据该预编译查询语句所查询的关系表的行数,初始化该预编译查询语句对应的执行计划更新阈值。
当对数据库中的数据进行增加、修改和删除之后,预编译查询语句所查询的关系表中的数据会随之发生改变,导致在此之前生成的与预编译查询语句相对应的执行计划可能会失效。因此,需要对执行计划进行更新,但如果每次预编译查询语句所查询的关系表中的数据发生改变时都要对执行计划进行更新,会占用大量的系统资源,并且也没有必要。例如某关系表中有上万行数据,如果只是更改其中的某几行数据的话,执行计划的有效性并不会有太大的影响,只有进行了大量的数据更改操作之后,才会影响到执行计划的有效性。因此为了保证执行计划的有效性,本发明提供的解决方案是对预编译查询语句设置一个与其对应的执行计划更新阈值,该阈值为全局变量,该阈值的大小与关系表的行数成正相关,表的行数越多,该阈值就设置的大一点,表的行数少的话,该阈值就设置的小一点,例如在优选实施例中将该阈值初始化为优选实施例的预编译查询语句所查询的关系表行数的十分之一,若预编译查询语句中所查询的关系表有多个,则将该阈值初始化为行数最少的关系表行数的十分之一。当用户对预编译查询语句所查询的关系表进行增加数据、删除数据和修改数据操作时,数据库会提供每次更改操作影响的数据行数,阈值将进行相应地更新,减去受影响的数据行数。
具体实施方式为数据库先执行语句“select reltuples from pg_class whererelname=‘table';”,其中‘table'表示要获取行数的关系表,根据预编译查询语句涉及到的关系表的不同会进行相应改变。通过该语句就可以获取关系表的行数,若预编译查询语句中所查询的关系表有多个,则获取多个关系表的行数,然后用所获取的关系表中行数最少的关系表行数乘以系数k,其中0<k≤1,所得的乘积就是预编译查询语句所对应的执行计划更新阈值的初始值。
优选实施例中是用所获取的关系表的行数乘以0.1后所得的乘积作为优选实施例预编译查询语句所对应的执行计划更新阈值的初始值。也就是对于优选实施例,需要获取student表的行数,所以数据库需要执行语句“select reltuples from pg_class whererelname=student;”,由此就可得到关系表student的行数20000,则优选实施例的预编译查询语句对应的执行计划更新阈值的初始值设置为20000*0.1=2000。
步骤4:将从步骤3获得的各参数值逐一代入到预编译查询语句中,依次获得与各参数值相对应的执行计划,并根据各参数值所分别对应的选择率划分出与各执行计划一一对应的选择率区间。
预编译查询语句代入参数值后就可以通过查询优化模块生成对应选择率下的执行计划。执行计划的生成方式属于数据库的已有内容,在此不再详述。生成执行计划的数量与用户设置的直方图桶的个数N有关,即参数值集合中会有N+1个参数值,将参数值集合中的各参数值逐一代入到预编译查询语句中会生成N+1个执行计划。考虑到选择率是一个在0到1连续区间内的值,无法保证每个选择率都有一个对应的执行计划。因此,本发明提供的解决方案是划分选择率区间,按照预设的选择率区间划分规则划分出与各执行计划一一对应的选择率空间,即每个选择率区间都有对应一个执行计划,当某个参数值对应的选择率落入某个选择率区间时,就会选择该选择率区间对应的执行计划执行。
下面将结合优选实施例对选择率区间划分的具体实施方式进行说明。在优选实施例中,先将获得的直方图边界[0,50,60,65,70,75,80,85,90,95,100]中的值分别代入预编译查询语句的占位符位置,即可获得各个边界值所对应的执行计划。与参数值[0,50,60,65,70,75,80,85,90,95,100]一一对应的选择率为[0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0],该优选实施例中选择率区间的划分规则为先将每两个相邻选择率进行取平均计算,再加上0和1,就可以得到一个新的组合[0,0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,0.95,1],然后将选择率区间[0,0.05)分配给选择率为0的参数值0生成的执行计划,区间[0.05,0.15)分配给选择率为0.1的参数值50生成的执行计划,以此类推,最后,本步骤生成的执行计划以及其对应的选择率区间如表3所示:
表3参数值、选择率区间与执行计划的对应关系示例
参数值 | 选择率区间 | 执行计划 |
0 | [0,0.05) | 执行计划1 |
50 | [0.05,0.15) | 执行计划2 |
60 | [0.15,0.25) | 执行计划3 |
65 | [0.25,0.35) | 执行计划4 |
70 | [0.35,0.45) | 执行计划5 |
75 | [0.45,0.55) | 执行计划6 |
80 | [0.55,0.65) | 执行计划7 |
85 | [0.65,0.75) | 执行计划8 |
90 | [0.75,0.85) | 执行计划9 |
95 | [0.85,0.95) | 执行计划10 |
100 | [0.95,1] | 执行计划11 |
步骤5:将步骤4生成的与各选择率区间相对应的执行计划进行去重处理且对应地对选择率区间进行合并处理,并将处理后的选择率区间和执行计划进行缓存。
在数据库中并不是选择率不同生成的执行计划就一定不同,选择率相差不多,则生成的执行计划很可能是相同的,所以步骤4生成的执行计划可能有重复的存在。为了节约内存资源,本步骤对步骤4生成的执行计划进行去重处理,并对相应的选择率区间进行合并,处理后的选择率区间和执行计划进行缓存。
对于优选实施例,假设执行计划3、4、5、6相同,执行计划7、8、9相同、则只会缓存执行计划3和7,并将之前执行计划3、4、5、6对应的选择率区间合并为[0.15,0.55),执行计划7、8、9对应的选择率区间合并为[0.55,0.85),因此,优选实施例的执行计划和选择率区间的缓存格式如表4所示。
表4执行计划和选择率区间的缓存格式示例
至此,已经对用户输入的预编译查询语句提前生成了执行计划。
步骤6:判断用户是否输入参数值及该预编译查询语句所要查询的关系表是否发生了数据改变,若用户未输入参数值,而该预编译查询语句所要查询的关系表发生了数据改变,则令执行计划更新阈值减去关系表中发生数据改变的行数,执行计划更新阈值得到相应地更新,若用户输入参数值,则执行步骤7。
若判断出该预编译查询语句所要查询的关系表发生了数据改变,则意味着用户对预编译查询语句所查询的关系表进行增加数据、删除数据和修改数据操作,则需对执行计划更新阈值进行相应地更新,这时数据库会提供每次更改操作影响的数据行数,对执行计划进行更新的具体实施方式是令执行计划更新阈值减去受影响的数据行数。例如,在优选实施例中,每当用户对student关系表进行修改,例如执行删除语句“delete from studentwhere grade<30;”,数据库会返回该删除语句执行完毕后影响student关系表的行数500,则令优选实施例的执行计划更新阈值对应地会减去500,使得优选实施例的执行计划更新阈值得以更新。
步骤7:获取用户输入的参数值。
预编译查询语句需要用户传入参数值代入占位符所在的位置后才可以返回查询结果。
步骤8:判断预编译语句对应的执行计划更新阈值是否大于0,若是,则执行步骤10,若否,则执行步骤9。
步骤9:按照步骤2至步骤5的方法,重新生成预编译查询语句对应的执行计划并转至步骤10。
当预编译查询语句对应的执行计划更新阈值小于等于0时,意味着预编译语句所要查询的关系表已经被进行了大量的数据更改操作,为了保证预编译查询语句执行计划的有效性,需要重新执行步骤2至步骤5以生成预编译查询语句对应的新的执行计划。而当执行计划更新阈值大于0时,则表示预编译查询语句对应的执行计划还未失效,直接执行步骤10即可。
步骤10:如图3所示,根据关系表属性的直方图边界,计算用户输入的参数值所对应的选择率。
根据上述优选实施例,优选实施例中关系表student中属性grade的直方图边界为[0,50,60,65,70,75,80,85,90,95,100]。具体实施方式中计算用户输入的参数值的选择率,首先需要判断用户输入的参数值是否超出了属性的范围,例如对于优选实施例,属性grade的数值范围是在0至100之间。如果用户输入的参数值小于0,则其代表的含义是要查询小于0的grade,因为不存在这样的结果,所以其对应的选择率为0。如果用户输入的参数值为150,则其代表的含义是要查询小于150的成绩,而grade的数值范围是在0至100,所以所有的数据都满足条件,其对应的选择率为1。其次,需要判断用户输入的参数值是否落在了直方图的边界上。如参数值75就落在了直方图的边界上,这时只需计算小于用户输入参数值的组的个数,小于75的组有0至50、50至60、60至65、65至70、70至75,一共5个。所以其对应的选择率为5*0.1=0.5。
对于其它输入参数值的选择率的计算,计算公式如下:
其中,BucketNum表示小于用户输入参数值的组的个数,假设用户输入的参数值为88,则小于88的组有0至50,50至60,60至65…80至85,一共7个。InputParameter表示用户输入的参数值88。LeftNum,RightNum分别表示用户输入的参数值所落入的所在直方图桶的两个边界值,对于参数值88来说,其所落入的桶是85至90,则LeftNum为85,RightNum为90。则参数值88所对应的选择率为0.1*7+(88-85)/(90-85)*0.1=0.76。
步骤11:根据步骤10得到的选择率,从缓存中取出与预编译查询语句和选择率区间都对应的执行计划。
通过步骤10获得用户输入的参数值所对应的选择率以后,从缓存中取出与预编译查询语句和选择率区间都对应的执行计划。
例如通过步骤10计算得到用户输入的参数值88的选择率是0.76,其对应的选择率区间为[0.55,0.85)。则在如下表5中缓存的执行计划进行查询,与预编译查询语句和选择率区间都对应的执行计划为执行计划7。
表5缓存中预编译查询语句、选择率区间与执行计划对应关系示例
步骤12:将从步骤11中获得的执行计划中的参数值替换为用户传入的参数值后,执行该执行计划。
执行计划是在提前生成执行计划的过程中通过给预编译查询语句设置选择率不同的参数值生成的,该参数值并不等于用户传入的参数值,所以在执行前,需要将执行计划的参数值替换为用户传入的参数值。
例如,对于用户传入的参数值88来说,与其对应的执行计划为执行计划7,但该执行计划是在等待用户传入参数值的时间段中,提前给预编译查询语句设置参数值80生成的,所以要将执行计划中参数值80修改为用户传入的参数值88才可以返回正确的执行结果。
根据上述,本发明提供的数据库预编译查询语句的执行方法充分利用了等待用户传入参数值的时间,使得数据库提前生成执行计划,在用户传入参数值后就可以不通过查询优化模块生成执行计划,而是直接获取执行计划,从而进一步的提高了查询语句的执行效率,降低了查询语句的执行时间。
应当理解的是,本领域技术人员在本发明技术构思的启发下,在不脱离本发明内容的基础上,可以根据上述说明做出各种改进或变换,这仍落在本发明的保护范围之内。
Claims (6)
1.一种数据库预编译查询语句的执行方法,其特征在于,包括如下步骤:
步骤1:获取用户输入的预编译查询语句;
步骤2:将该预编译查询语句转化为语法查询树;
步骤3:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的不同参数值,并确定每一参数值所对应的选择率;同时,初始化该预编译查询语句对应的执行计划更新阈值;
步骤4:将从步骤3获得的各参数值逐一代入到该预编译查询语句中,依次获得与各参数值相对应的执行计划,并根据各参数值所分别对应的选择率划分出与各执行计划一一对应的选择率区间;
步骤5:将步骤4生成的与各选择率区间相对应的执行计划进行去重处理且对应地对选择率区间进行合并处理,并将处理后的选择率区间和执行计划进行缓存;
步骤6:判断用户是否输入参数值及该预编译查询语句所要查询的关系表是否发生了数据改变,若用户未输入参数值,而该预编译查询语句所要查询的关系表发生了数据改变,则令执行计划更新阈值减去关系表中发生数据改变的行数,执行计划更新阈值得到相应的更新,若用户输入参数值,则执行步骤7;
步骤7:获取用户输入的参数值;
步骤8:判断该预编译查询语句对应的执行计划更新阈值是否大于0,若是,则执行步骤10,若否,则执行步骤9;
步骤9:按照步骤2至步骤5的方法,重新生成预编译查询语句对应的执行计划并转至步骤10;
步骤10:计算用户输入的参数值所对应的选择率;
步骤11:根据步骤10得到的选择率,从缓存中取出与预编译查询语句和选择率区间都对应的执行计划;
步骤12:将从步骤11中获得的执行计划中的参数值替换为用户传入的参数值后,执行该执行计划。
2.根据权利要求1所述的数据库预编译查询语句的执行方法,其特征在于,步骤3包括如下步骤:
步骤3.1:分析该预编译查询语句中占位符所对应的属性,得到可能会生成不同执行计划的不同参数值,并确定每一参数值所对应的选择率;
步骤3.1.1:根据用户传入的预编译查询语句,修改并更新数据库中的直方图信息;
步骤3.1.2:获得该预编译查询语句中占位符所对应的属性的直方图边界,将直方图边界值作为可能会生成不同执行计划的不同参数值,并确定每一参数值所对应的选择率,这些参数值构成参数值集合;
步骤3.2:根据该预编译查询语句所查询的关系表的行数,初始化该预编译查询语句对应的执行计划更新阈值。
3.根据权利要求2所述的数据库预编译查询语句的执行方法,其特征在于,步骤3.1.1中所述的修改并更新数据库中的直方图信息的方法为:先执行语句1:“alter table‘table’ alter ‘col’ set statistics ‘N’;”,再执行语句2:“analyze ‘table’;”。
4.根据权利要求2所述的数据库预编译查询语句的执行方法,其特征在于,步骤3.1.2中所述的获得该预编译查询语句中占位符所对应的属性的直方图边界的方法为:数据库执行语句“select histogram_bounds from pg_stats where tablename = 'table' andattname = 'col';”。
5.根据权利要求2所述的数据库预编译查询语句的执行方法,其特征在于,步骤3.2所述的初始化该预编译查询语句对应的执行计划更新阈值的方法为:首先获取关系表的行数,若该预编译查询语句中所查询的关系表有多个,则获取多个关系表的行数,然后用关系表中行数最少的关系表行数乘以系数k,其中0<k£1,所得的乘积作为该预编译查询语句所对应的执行计划更新阈值的初始值。
6.根据权利要求1所述的数据库预编译查询语句的执行方法,其特征在于,在步骤4中选择率区间的划分规则为:首先将步骤3中得到与各参数值所对应的选择率按照大小顺序排序;然后将每两个相邻选择率进行取平均计算,所得的各平均值与选择率最大值和选择率最小值一起再按照大小顺序排序,得到一个新的组合;再然后从该组合中将每两个相邻值取出作为一个选择率区间,将得到选择率区间逐一分配给对应的执行计划。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110317694.1A CN113076332B (zh) | 2021-03-25 | 2021-03-25 | 一种数据库预编译查询语句的执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110317694.1A CN113076332B (zh) | 2021-03-25 | 2021-03-25 | 一种数据库预编译查询语句的执行方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113076332A CN113076332A (zh) | 2021-07-06 |
CN113076332B true CN113076332B (zh) | 2023-08-01 |
Family
ID=76610176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110317694.1A Active CN113076332B (zh) | 2021-03-25 | 2021-03-25 | 一种数据库预编译查询语句的执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113076332B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116701429B (zh) * | 2023-05-19 | 2023-12-29 | 杭州云之重器科技有限公司 | 一种基于批量历史任务模糊化的公共查询方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003316811A (ja) * | 2002-04-22 | 2003-11-07 | Ricoh Co Ltd | 異種データベース統合システムにおける問い合わせ最適化処理装置、方法、及びその方法をコンピュータに実行させるプログラム |
CN105224690A (zh) * | 2015-10-30 | 2016-01-06 | 上海达梦数据库有限公司 | 生成并选择对应含参语句的执行计划的方法及系统 |
WO2017189026A1 (en) * | 2016-04-25 | 2017-11-02 | GraphSQL, Inc. | System and method for querying a graph model |
CN110297701A (zh) * | 2019-05-16 | 2019-10-01 | 平安科技(深圳)有限公司 | 数据处理作业调度方法、装置、计算机设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8396852B2 (en) * | 2010-09-20 | 2013-03-12 | International Business Machines Corporation | Evaluating execution plan changes after a wakeup threshold time |
CN104216894B (zh) * | 2013-05-31 | 2017-07-14 | 国际商业机器公司 | 用于数据查询的方法和系统 |
KR20180035035A (ko) * | 2016-09-28 | 2018-04-05 | 한국전자통신연구원 | 데이터 엔진에서의 질의 최적화 방법 및 장치 |
US10915506B2 (en) * | 2017-09-06 | 2021-02-09 | Oracle International Corporation | System and method for row buffering in a database environment |
-
2021
- 2021-03-25 CN CN202110317694.1A patent/CN113076332B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003316811A (ja) * | 2002-04-22 | 2003-11-07 | Ricoh Co Ltd | 異種データベース統合システムにおける問い合わせ最適化処理装置、方法、及びその方法をコンピュータに実行させるプログラム |
CN105224690A (zh) * | 2015-10-30 | 2016-01-06 | 上海达梦数据库有限公司 | 生成并选择对应含参语句的执行计划的方法及系统 |
WO2017189026A1 (en) * | 2016-04-25 | 2017-11-02 | GraphSQL, Inc. | System and method for querying a graph model |
CN110297701A (zh) * | 2019-05-16 | 2019-10-01 | 平安科技(深圳)有限公司 | 数据处理作业调度方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
Efficient SQL querying on embedded devices using pre-compilation;Graeme Douglas等;《ACM SIGAPP Applied computing review》;第16卷(第2期);42-47 * |
基于自适应统计信息管理的查询优化器的研究与实现;李阳;《中国优秀硕士学位论文全文数据库 信息科技辑》;I138-92 * |
Also Published As
Publication number | Publication date |
---|---|
CN113076332A (zh) | 2021-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3098730B1 (en) | Aggregating database entries by hashing | |
CN109241093B (zh) | 一种数据查询的方法、相关装置及数据库系统 | |
US5806059A (en) | Database management system and method for query process for the same | |
US20170083573A1 (en) | Multi-query optimization | |
US20010014888A1 (en) | Database management system and method for query process for the same | |
CN107710201B (zh) | 存储数据和从位向量搜索索引取回数据 | |
CN107851108B (zh) | 使用位向量搜索索引的匹配文档 | |
CN105069117A (zh) | 一种基于存储过程的数据流效率提升方法 | |
CN113076332B (zh) | 一种数据库预编译查询语句的执行方法 | |
CN109753306A (zh) | 一种预编译函数缓存引擎的大数据处理方法 | |
CN111078705A (zh) | 基于Spark平台建立数据索引方法及数据查询方法 | |
CN108334532B (zh) | 一种基于Spark的Eclat并行化方法、系统及装置 | |
CN117827881A (zh) | 一种基于历史信息的Spark SQL Shuffle任务数优化系统 | |
CN107436865A (zh) | 一种词对齐训练方法、机器翻译方法及系统 | |
CN109902292B (zh) | 中文词向量处理方法及其系统 | |
CN107066587A (zh) | 一种基于组链表的高效频繁项集挖掘方法 | |
CN107506365B (zh) | 一种对输出列进行合并计算的方法 | |
CN116401277A (zh) | 数据处理方法、装置、系统、设备及介质 | |
CN105512184B (zh) | 一种提高应用系统在关系数据库的空间与时间效率的方法 | |
Vemuri et al. | Execution primitives for scalable joins and aggregations in map reduce | |
CN112395856A (zh) | 文本匹配方法、装置、计算机系统及可读存储介质 | |
CN110597850A (zh) | 一种提高数据库查询响应速度的常量优化方法 | |
CN111221864B (zh) | 一种基于mysql慢查询日志词频分析的索引智能推荐方法 | |
CN117390064B (zh) | 一种基于可嵌入子图的数据库查询优化方法 | |
CN114090627B (zh) | 一种数据查询方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |