数据库的查询优化方法、机器可读存储介质与计算机设备与流程

文档序号:33381779发布日期:2023-03-08 06:09阅读:33来源:国知局
数据库的查询优化方法、机器可读存储介质与计算机设备与流程

1.本发明涉及数据库查询优化技术,特别是涉及一种数据库的查询优化方法、机器可读存储介质与计算机设备。


背景技术:

2.数据查询语句的执行需要依次经过解析器,优化器,执行器阶段,最终才能返回查询结果。目前现有关系型数据库系统在优化器阶段一般根据统计信息计算执行代价从而选择最优的执行计划。
3.统计信息的生成技术分为静态采样和动态采样两种。静态采样如直方图,mcv(most common value,最常见数值)等,收集的是数据表的各个列上的数据分布情况。由于用户数据的复杂性,采样数据的误差和计算方法存在不完备等一系列因素,现有数据库系统无法保证根据静态采样值能100%生成最优执行计划。动态采样为执行过程中采集查询语句(例如sql)需要的统计信息,其采集的信息比静态采样准确,但因为额外的采样工作,影响查询语句的执行效率。
4.在现实使用环境中,往往是几条或者几种类型的sql语句执行缓慢从而影响了整个系统的执行效率。此时,需要数据库管理员(database administrator,简称dba)根据经验在现场对,或通过hint强制指定高效的计划,这样的方案显然需要大量的人力和时间成本。


技术实现要素:

5.本发明的一个目的是要解决现有数据库对特定查询语句优化效率低的问题。
6.本发明的一个进一步目的解决现有数据库对特定查询语句选择的执行计划可能并非最优的问题。
7.本发明的另一个进一步目的是提高数据库对特定查询语句的执行效率。
8.特别地,本发明提供了一种数据库的查询优化方法,其包括:
9.获取查询语句;
10.对查询语句进行语法语义解析,得到由查询语句的查询原子操作构成的树形结构;
11.对树形结构进行遍历,并确定每个查询原子操作的查询操作标识;
12.根据查询操作标识在预先生成的统计信息表查询对应的统计信息;
13.使用统计信息进行代价估算;
14.根据代价估算的结果选择执行计划。
15.可选地,在获取查询语句的步骤之前还包括:
16.获取统计信息表创建语句,统计信息表创建语句包括指定的优化目标语句;
17.按照统计信息表创建语句创建统计信息表;
18.将优化目标语句分解为多个统计原子操作;
19.根据每个统计原子操作生成统计操作标识并采集统计信息;
20.在统计信息表中存储每个统计原子操作的统计操作标识以及统计信息。
21.可选地,根据每个统计原子操作生成统计操作标识的步骤包括:
22.筛除统计原子操作中包含的常量,并将筛除常量后的统计原子操作转换为字符串;
23.对字符串使用散列函数进行散列计算,得到的散列值作为统计操作标识。
24.可选地,确定每个查询原子操作的统计操作标识的步骤包括:
25.筛除查询原子操作中包含的常量,并将筛除常量后的查询原子操作转换为字符串并对字符串使用散列函数进行散列计算,得到的散列值作为查询操作标识。
26.可选地,根据查询操作标识在预先生成的统计信息表查询对应的统计信息的步骤包括:
27.查询统计信息表中是否存在与查询操作标识一致的统计操作标识;
28.若存在,则获取统计信息表中与查询操作标识一致的统计操作标识的统计信息。
29.可选地,在查询统计信息表中是否存在与查询操作标识一致的统计操作标识的步骤之后还包括:
30.若统计信息表中不存在与查询操作标识一致的统计操作标识,则使用初始的代价估计算法进行代价估算。
31.可选地,根据每个统计原子操作采集统计信息的步骤包括:
32.对优化目标语句涉及的表进行数据采样,得到采样值;
33.按照统计原子操作对采样值进行查询统计和/或代价统计,得到统计信息。
34.可选地,统计信息表创建语句中还包括统计信息名称;并且
35.在按照统计信息表创建语句创建统计信息表的步骤之后还包括:
36.在统计信息表中存储统计信息名称。
37.根据本发明的另一个方面,还提供了一种机器可读存储介质,其上存储有机器可执行程序,机器可执行程序被处理器执行时实现上述任一种的数据库的查询优化方法。
38.根据本发明的又一个方面,还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并在处理器上运行的机器可执行程序,并且处理器执行机器可执行程序时实现上述任一种的数据库的查询优化方法。
39.本发明的数据库的查询优化方法,将查询语句通过语法语义解析得到其包含的原子操作,通过对查询统计信息表查询得到原子操作的统计信息,改变了现有数据库以列为单位存储统计信息的方式,而是以原子运算为单位确定统计信息。由于优化过程将代价估计运算直接使用原子运算预先得出的统计信息,效率大大提高。
40.进一步地,本发明的数据库的查询优化方法,根据按照统计信息表创建语句创建统计信息表,针对特定的优化目标语句实现优化,灵活性高,可以有选择性地针对执行效率不高的查询语句进行优化。各原子操作的基数估计和代价估计更加准确,为数据库优化器选择最优的执行计划提供了基础。
41.根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
42.后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。附图中:
43.图1是根据本发明一个实施例的数据库的查询优化方法的示意图;
44.图2是根据本发明一个实施例的数据库的查询优化方法中统计信息的生成过程的流程示意图;
45.图3是根据本发明一个实施例的数据库的查询优化方法中统计信息的使用过程的流程示意图;
46.图4是根据本发明一个实施例的机器可读存储介质的示意图;以及
47.图5是根据本发明一个实施例的计算机设备的示意图。
具体实施方式
48.图1是根据本发明一个实施例的数据库的查询优化方法的示意图。该数据库的查询优化方法一般性地可以包括:
49.步骤s102,获取查询语句;查询语句一般为sql语句,本实施例的方法可以针对执行效率不高的sql进行优化。
50.步骤s104,对查询语句进行语法语义解析,得到由查询语句的查询原子操作构成的树形结构。原子操作可以是语句执行过程中不可被中断的单个操作,一般而言,本实施例的方法针对的查询语句包括多个原子操作。
51.步骤s106,对树形结构进行遍历,并确定每个查询原子操作的查询操作标识。一种确定查询原子操作的统计操作标识的实现方式可以包括:筛除查询原子操作中包含的常量,并将筛除常量后的查询原子操作转换为字符串并对字符串使用散列函数进行散列计算,得到的散列值作为查询操作标识。
52.步骤s108,根据查询操作标识在预先生成的统计信息表查询对应的统计信息。例如可以查询统计信息表中是否存在与查询操作标识一致的统计操作标识;若存在,则获取统计信息表中与查询操作标识一致的统计操作标识的统计信息。如果统计信息表中不存在与查询操作标识一致的统计操作标识,那么可以使用初始的代价估计算法进行代价估算,例如采用直方图、mcv等静态采样或者其他动态采样的方式进行代价估算。
53.统计信息表预先按照统计信息表创建语句进行创建,其每个元组记录的属性包括原子操作标识、统计信息名称、统计信息内容。统计信息表通过预先的数据采集和代价估计,可以得到更加准确的统计信息。
54.步骤s110,使用统计信息进行代价估算。
55.步骤s112,根据代价估算的结果选择执行计划,一般可以选择执行计划最小的执行计划,以选择最优的执行计划,从而达到sql调优的目的。
56.上述实施例的数据库的查询优化方法,将查询语句通过语法语义解析得到其包含的原子操作,通过对查询统计信息表查询得到原子操作的统计信息,改变了现有数据库以列为单位存储统计信息的方式,而是以原子运算为单位确定统计信息。由于优化过程将代价估计运算直接使用原子运算预先得出的统计信息,效率大大提高。
57.本实施例的数据库的查询优化方法,根据按照统计信息表创建语句创建统计信息表,针对特定的优化目标语句实现优化。各原子操作的基数估计和代价估计更加准确,为数据库优化器选择最优的执行计划提供了基础。
58.在上述步骤s102获取查询语句之前,创建统计信息表的过程可以包括:获取统计信息表创建语句,统计信息表创建语句包括指定的优化目标语句;按照统计信息表创建语句创建统计信息表;将优化目标语句分解为多个统计原子操作;根据每个统计原子操作生成统计操作标识并采集统计信息;在统计信息表中存储每个统计原子操作的统计操作标识以及统计信息。
59.上述步骤中,根据每个统计原子操作生成统计操作标识的步骤包括:筛除统计原子操作中包含的常量,并将筛除常量后的统计原子操作转换为字符串;对字符串使用散列函数进行散列计算,得到的散列值作为统计操作标识。统计操作标识利用筛除常量后的统计原子操作转换成的字符串生成,与原子操作本身一一对应。利用散列值作为标识,可以提高查询统计信息表的效率。
60.相应地,上述步骤s106中确定每个查询原子操作的统计操作标识的步骤可以包括:筛除查询原子操作中包含的常量,并将筛除常量后的查询原子操作转换为字符串并对字符串使用散列函数进行散列计算,得到的散列值作为查询操作标识。根据查询操作标识在预先生成的统计信息表查询对应的统计信息的步骤可以为:查询统计信息表中是否存在与查询操作标识一致的统计操作标识;若存在,则获取统计信息表中与查询操作标识一致的统计操作标识的统计信息。若统计信息表中不存在与查询操作标识一致的统计操作标识,则使用初始的代价估计算法进行代价估算。
61.根据每个统计原子操作采集统计信息的步骤可以包括:对优化目标语句涉及的表进行数据采样,得到采样值;按照统计原子操作对采样值进行查询统计和/或代价统计,得到统计信息。这些统计信息可以为直方图或mcv图等。除了统计基数值,即一个原子操作返回的结果行数,进一步可以采集代价值,通过对采样数据的原子操作代价进行记录,对代价计算因子进行矫正。
62.统计信息表创建语句中还可以包括统计信息名称;并且在按照统计信息表创建语句创建统计信息表的步骤之后还包括:在统计信息表中存储统计信息名称。统计信息名称可以方便后续维护和用户阅读数据。
63.本实施例的数据库的查询优化方法,大体可以分为统计信息的生成过程(创建统计信息表的过程)以及统计信息的使用过程(查询语句的优化过程)。
64.图2是根据本发明一个实施例的数据库的查询优化方法中统计信息的生成过程的流程示意图。统计信息的生成过程可以包括以下步骤:
65.步骤s202,获取统计信息表创建语句,本实施例可以定义create spl statistic命令用于输入创建统计信息表的请求。
66.对于生成的执行计划效率不高的sql语句,如果希望对其能自动调优,本实施例可通过如下统计信息表创建语句为其生成特定的统计信息:
67.create sql statistic《stat_name》as《sql》
68.在上述统计信息表创建语句中,create sql statistic命令用于定义创建语句的类型,stat_name为统计信息的名字,通过stat_name可以方便用户查找建立的统计信息,
sql为指定的优化目标语句。数据库系统创建一个系统表用于保存该种类型的统计信息。其格式可以如表1所示。
69.表1
[0070][0071]
优化目标语句可以为任意的select查询语句。
[0072]
以下以select*from t1,t2 where t1.id=t2.id and t1.score《20and t1.id《20的查询语句为例进行介绍。
[0073]
步骤s204,将优化目标语句分解为多个统计原子操作。数据库接收到create sql statistic请求后,首先将请求中的select sql进行语法语义解析,生成一个由原子操作组成的树形结构。然后遍历该树,将每个节点作为一个原子操作存入一个链表中。对于上述举例的sql可以被分解为以下两个原子操作:
[0074]
原子操作1:scan t1(score《20and id《20);
[0075]
原子操作2:t1 join t2(t1.id=t2.id)。
[0076]
步骤s206,筛除统计原子操作中包含的常量,并相应计算统计操作标识。
[0077]
将上述原子操作1和原子操作2中的列表常来应去除,将其变为字符串后进行散列运算(例如md5运算)得到operatorid。
[0078]
原子操作1的散列运算结果:md5 value1:scan t1(score《?and id《?);
[0079]
原子操作2的散列运算结果:md5 value2:t1 join t2(t1.id=t2.id)
[0080]
步骤s208,根据每个原子操作的条件确定统计信息,并存储至统计信息表。
[0081]
对sql中涉及的表进行采样。对于上述举例的sql涉及的表t1、t2中分别采集一定数量(例如10000条,具体数量根据表的大小以及数据库处理能力确定)的数据。然后依次对涉及的两个原子操作1、原子操作2分别进行统计信息的计算以便进行基数估算。
[0082]
进行统计信息收集时,可以首先判断原子操作的类型,如scan,join,group等,然后根据操作的变量参数从采样值中取数据进行计算。
[0083]
例如对scan t1(score《?and id《?),得到一个多列(score,id)统计信息。对t1 join t2(t1.id=t2.id),得到一个多表中的列(t1.id,t2.id)的统计。这些统计信息可以为直方图或mcv图等。
[0084]
除了统计基数值,即一个原子操作返回的结果行数之外,统计信息还可以采集代价值,通过对采样数据的原子操作代价进行记录,对代价计算因子进行矫正。
[0085]
统计信息以格式化的形式(如json或xml)存储在sql_statistic表的stat_values单列中,也可以通过多列的形式存储。
[0086]
数据库的sql的处理分为几个阶段:解析器对sql进行语法语义解析得到一个内部的数据结构树形结构query,优化器将其进行变换生成执行效率更优的query,然后会使用统计信息进行基数估计和代价运算,来计算每个操作的最优执行计划,最终执行计划得到结果。在使用统计信息进行基数估计和代价运算时,实际上优化器已经将每个运算变成了
原子操作。图3是根据本发明一个实施例的数据库的查询优化方法中统计信息的使用过程的流程示意图。统计信息的使用过程可以包括以下步骤:
[0087]
步骤s302,获取查询语句sql,并对sql进行语法语义解析,得到由查询语句的查询原子操作构成的树形结构;
[0088]
步骤s304,根据查询原子操作计算查询操作标识operatorid。查询操作标识operatorid的计算过程与上述将上述原子操作1和原子操作2的字符串进行散列运算(例如md5运算)得到operatorid的计算过程一致,在此不做赘述。
[0089]
步骤s306,根据查询操作标识operatorid在统计信息表sql statistic中进行查询。
[0090]
步骤s308,在查询到结果的情况下,根据原子操作的常量参数和统计信息进行基数估计和代价估计。stat_values列中读取的统计信息后,使用该统计信息进行基数估计和代价运算。例如,对scan t1(score《?and id《?),stat_values中的统计信息保留了两个列score和id的相关性信息,这些相关性信息比常规的方式更加准确。
[0091]
步骤s310,在无法查询到结果的情况下,根据数据库系统初始的代价估计算法进行基数估计和代价估计。
[0092]
本实施例使sql中各原子操作的基数估计和代价估计更加准确,从而使数据库优化器可以选择最优的执行计划。从而达到自动sql调优的目的。
[0093]
本实施例还提供了一种机器可读存储介质和计算机设备。图4是根据本发明一个实施例的机器可读存储介质40的示意图,图5是根据本发明一个实施例的计算机设备50的示意图。
[0094]
机器可读存储介质40其上存储有机器可执行程序41,机器可执行程序41被处理器执行时实现上述任一实施例的数据库的查询优化方法。
[0095]
计算机设备50可以包括存储器520、处理器510及存储在存储器520上并在处理器510上运行的机器可执行程序41,并且处理器510执行机器可执行程序41时实现上述任一实施例的数据库的查询优化方法。
[0096]
需要说明的是,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何机器可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。
[0097]
就本实施例的描述而言,机器可读存储介质40可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。机器可读存储介质40的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,机器可读存储介质40甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
[0098]
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。
[0099]
计算机设备50可以是例如服务器、台式计算机、笔记本式计算机、平板计算机或智能手机。在一些示例中,计算机设备50可以是云计算节点。计算机设备50可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括执行特定的任务或者实现特定的抽象数据类型的例程、程序、目标程序、组件、逻辑、数据结构等。计算机设备50可以在通过通信网络链接的远程处理设备执行任务的分布式云计算环境中实施。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
[0100]
计算机设备50可以包括适于执行存储的指令的处理器510、在操作期间为所述指令的操作提供临时存储空间的存储器520。处理器510可以是单核处理器、多核处理器、计算集群或任何数量的其他配置。存储器520可以包括随机存取存储器(ram)、只读存储器、闪存或任何其他合适的存储系统。
[0101]
处理器510可以通过系统互连(例如pci、pci-express等)连接到适于将计算机设备50连接到一个或多个i/o设备(输入/输出设备)的i/o接口(输入/输出接口)。i/o设备可以包括例如键盘和指示设备,其中指示设备可以包括触摸板或触摸屏等等。i/o设备可以是计算机设备50的内置组件,或者可以是外部连接到计算设备的设备。
[0102]
处理器510也可以通过系统互连链接到适于将计算机设备50连接到显示设备的显示接口。显示设备可以包括作为计算机设备50的内置组件的显示屏。显示设备还可以包括外部连接到计算机设备50的计算机监视器、电视机或投影仪等。此外,网络接口控制器(network interface controller,nic)可以适于通过系统互连将计算机设备50连接到网络。在一些实施例中,nic可以使用任何合适的接口或协议(诸如因特网小型计算机系统接口等)来传输数据。网络可以是蜂窝网络、无线电网络、广域网(wan))、局域网(lan)或因特网等等。远程设备可以通过网络连接到计算设备。
[0103]
本实施例提供的流程图并不旨在指示方法的操作将以任何特定的顺序执行,或者方法的所有操作都包括在所有的每种情况下。此外,方法可以包括附加操作。在本实施例方法提供的技术思路的范围内,可以对上述方法进行附加的变化。
[0104]
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1