CN114372065A - 访问数据库表的方法和装置 - Google Patents
访问数据库表的方法和装置 Download PDFInfo
- Publication number
- CN114372065A CN114372065A CN202210282520.0A CN202210282520A CN114372065A CN 114372065 A CN114372065 A CN 114372065A CN 202210282520 A CN202210282520 A CN 202210282520A CN 114372065 A CN114372065 A CN 114372065A
- Authority
- CN
- China
- Prior art keywords
- index
- database
- indexes
- query statement
- dimension
- 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.)
- Pending
Links
Images
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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/2453—Query optimisation
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供一种访问数据库表的方法和装置。该方法包括:接收第一数据库查询语句,其中所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数;根据所述第一数据库查询语句,采用Skyline剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引;针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
Description
技术领域
本公开实施例涉及数据库领域,更为具体地,涉及一种访问数据库表的方法和装置。
背景技术
在关系型数据库中,基表访问路径选择方法是指数据库的优化器选择索引或索引路径的方法。传统的基表访问路径选择方法需要评估每一个索引路径的代价并选择代价最小的索引路径来访问数据库中的表。
通常来说,索引路径的代价评估取决于很多因素。例如,索引路径的代价评估可以考虑以下因素中的一种或多种:扫描的行数,回表的行数,投影的列数,谓词的个数等。这些因素中的大部分因素均需要通过数据库系统维护的统计信息计算得到。
在数据库系统中,统计信息通常不是100%精准的。首先,统计信息是通过采样的方式搜集得到的,所以必然存在采样误差。其次,统计信息搜集是有一定滞后性的。例如,在对一个数据库查询语句进行优化时,该优化所基于的统计信息通常是数据库系统前一时刻的统计信息。这种统计信息的不准确性可能会导致索引路径的代价计算不准确,最终导致数据库选择了错误的索引路径。
发明内容
本公开实施例提供一种访问数据库表的方法和装置,以提高索引路径选择的准确性。
第一方面,提供一种访问数据库表的方法,包括:接收第一数据库查询语句,其中所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数;根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引;针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
可选地,作为一种可能的实现方式,所述根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引,包括:根据所述第一数据库查询语句,采用所述边际线剪枝规则比较所述N个索引的优劣,得到M个索引,其中M为大于1且小于等于N的正整数;根据所述M个索引对应的访问路径的代价,从所述M个索引中选取所述目标索引。
可选地,作为一种可能的实现方式,所述边际线剪枝规则定义了用于比较不同索引优劣的至少一个维度,所述至少一个维度包括以下维度中的部分或全部:与回表关联的第一维度;与有用序关联的第二维度;以及与查询范围关联的第三维度。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第一维度的优劣关系被定义为:针对所述第一数据库查询语句,如果采用所述第一索引对应的访问路径访问所述数据库表时不需要回表,而采用所述第二索引对应的访问路径访问所述数据库表时需要回表,则所述第一索引优于所述第二索引。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,所述第一索引能够提供的有用序向量为第一向量,所述第二索引能够提供的有用序向量为第二向量,所述第一向量包含n个元素,所述第二向量包含m个元素,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第二维度的优劣关系被定义为:针对所述第一数据库查询语句,如果n大于m,且所述第一向量的前m个元素与所述第二向量中的m个元素相同,则所述第一索引优于所述第二索引。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第三维度的优劣关系被定义为:针对所述第一数据库查询语句,如果所述第一索引中的能够用于确定查询范围的列的集合为所述第二索引中的能够用于确定查询范围的列的集合的超集,则所述第一索引优于所述第二索引。
第二方面,提供一种访问数据库表的装置,包括:接收模块,用于接收第一数据库查询语句,其中所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数;选取模块,用于根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引;访问模块,用于针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
可选地,作为一种可能的实现方式,所述选取模块用于根据所述第一数据库查询语句,采用所述边际线剪枝规则比较所述N个索引的优劣,得到M个索引,其中M为大于1且小于等于N的正整数;根据所述M个索引对应的访问路径的代价,从所述M个索引中选取所述目标索引。
可选地,作为一种可能的实现方式,所述边际线剪枝规则定义了用于比较不同索引优劣的至少一个维度,所述至少一个维度包括以下维度中的部分或全部:与回表关联的第一维度;与有用序关联的第二维度;以及与查询范围关联的第三维度。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第一维度的优劣关系被定义为:针对所述第一数据库查询语句,如果采用所述第一索引对应的访问路径访问所述数据库表时不需要回表,而采用所述第二索引对应的访问路径访问所述数据库表时需要回表,则所述第一索引优于所述第二索引。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,所述第一索引能够提供的有用序向量为第一向量,所述第二索引能够提供的有用序向量为第二向量,所述第一向量包含n个元素,所述第二向量包含m个元素,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第二维度的优劣关系被定义为:针对所述第一数据库查询语句,如果n大于m,且所述第一向量的前m个元素与所述第二向量中的m个元素相同,则所述第一索引优于所述第二索引。
可选地,作为一种可能的实现方式,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第三维度的优劣关系被定义为:针对所述第一数据库查询语句,如果所述第一索引中的能够用于确定查询范围的列的集合为所述第二索引中的能够用于确定查询范围的列的集合的超集,则所述第一索引优于所述第二索引。
第三方面,提供一种访问数据库表的装置,包括:存储器,用于存储指令;处理器,用于执行所述存储器中存储的指令,以执行如第一方面或第一方面中的任意一种可能的实现方式所述的方法。
第四方面,提供一种计算机可读存储介质,其上存储有用于执行第一方面或第一方面中的任意一种可能的实现方式所述的方法的指令。
第五方面,提供一种计算机程序产品,包括用于执行第一方面或第一方面中的任意一种可能的实现方式所述的方法的指令。
本公开实施例提出一种基于边际线(Skyline)算子的索引选择方式。边际线剪枝规则的引入能够排除掉一些次优索引,从而能够提高索引路径选择的准确性和鲁棒性。
附图说明
为了更清楚地说明本公开实施例或背景技术中的技术方案,下面将对本公开实施例的附图进行说明。
图1是天际线的示例图。
图2是本公开实施例提供的访问数据库表的方法的流程示意图。
图3是本公开一个实施例提供的访问数据库表的装置的结构示意图。
图4是本公开另一实施例提供的访问数据库表的装置的结构示意图。
具体实施方式
下面结合本公开实施例中的附图对本公开实施例进行描述。以下描述中,参考形成本公开一部分并以说明之方式示出本公开实施例的具体方面或可使用本公开实施例的具体方面的附图。应理解,本公开实施例可在其它方面中使用,并可包括附图中未描绘的结构或逻辑变化。因此,以下详细描述不应以限制性的意义来理解,且本公开的范围由所附权利要求书界定。例如,应理解,结合所描述方法的揭示内容可以同样适用于用于执行所述方法的对应设备或系统,且反之亦然。例如,如果描述一个或多个具体方法步骤,则对应的设备可以包含如功能单元等一个或多个单元,来执行所描述的一个或多个方法步骤(例如,一个单元执行一个或多个步骤,或多个单元,其中每个都执行多个步骤中的一个或多个),即使附图中未明确描述或说明这种一个或多个单元。另一方面,例如,如果基于如功能单元等一个或多个单元描述具体装置,则对应的方法可以包含一个步骤来执行一个或多个单元的功能性(例如,一个步骤执行一个或多个单元的功能性,或多个步骤,其中每个执行多个单元中一个或多个单元的功能性),即使附图中未明确描述或说明这种一个或多个步骤。进一步,应理解的是,除非另外明确提出,本文中所描述的各示例性实施例和/或方面的特征可以相互组合。
在关系型数据库中,基表访问路径选择方法是指数据库的优化器选择索引或索引路径的方法。因此,基表访问路径选择方法有时也可称为索引路径选择方法。相关技术中,索引路径选择方法需要评估每一个索引路径的代价并选择代价最小的索引路径来访问数据库中的表。
通常来说,索引路径的代价评估取决于很多因素。例如,索引路径的代价评估可以考虑以下因素中的一种或多种:扫描的行数,回表的行数,投影的列数,谓词的个数等。这些因素中的大部分因素均需要通过数据库系统维护的统计信息计算得到。
在数据库系统中,统计信息通常不是100%精准的。首先,统计信息是通过采样的方式搜集得到的,所以必然存在采样误差。其次,统计信息搜集是有一定滞后性的。例如,在对一个数据库查询语句进行优化时,该优化所基于的统计信息通常是数据库系统前一时刻的统计信息。这种统计信息的不准确性可能会导致索引路径的代价计算不准确,最终导致数据库(数据库中的优化器)选择了错误的索引路径。
为了防止数据库系统因为代价的不准确性而导致选择了错误的索引,本公开实施例提出一种基于边际线(Skyline)算子的索引选择方式,以提高索引路径选择的准确性。Skyline剪枝规则可以比较多个索引(或多条索引路径)的优劣,如果一个索引在一些定义的维度上优于(dominate)另外一个索引,那么被优于(dominated)的那个索引会被剪掉。最后,可以从没有被剪掉的索引中选择合适的索引。例如,可以对没有被剪掉的索引进行代价比较,从而选取代价最低的索引。当然,如果没有被剪掉的索引的数量为一,可以直接将该索引作为最终选择的索引。相比于传统的完全依赖代价的索引方法,基于Skyline剪枝规则选择出的索引具有更高的准确性。
为了便于理解,先结合图1,对Skyline剪枝规则进行举例说明。
Skyline剪枝规则是学术界在2001年提出的一个新的数据库算子。该数据库算子并非标准的数据库算子。在Skyline剪枝规则被提出之后,学术界对Skyline剪枝规则有大量的研究。对Skyline剪枝规则的研究涉及Skyline剪枝规则的语法、语义和执行等诸多方面。Skyline从字面上的理解是指天空中的一些边际点,这些点组成了搜索空间中的最优解的集合。
例如,假设我们的目标是要寻找价格最低并且路途最短的一家旅馆,则可以想象一个二维空间,该二维空间有两个维度,其中一个维度为价格,另一个维度为距离。在该二维空间中,可以采用横轴表示价格,采用纵轴表示距离,该二维空间中的每个点可以表示一个旅馆。
从图1可以看到,不论最后选择哪个旅馆,最优的解肯定是在所有点形成的一条天空的Skyline 11上。假设点A不在Skyline11上,那么肯定能够在Skyline11上找到在两个维度上都比点A更优的点B。在图1所示的场景中,如果一个旅馆对应的点A不在边际线上,则一定能够在边际线上找到点B,且点B所表示的旅馆比点A所表示的旅馆距离更近、价格更便宜。在上述情况下,我们称点B优于点A。Skyline剪枝规则的一个重要应用场景为:当我们没办法去衡量多个维度的比重,或者多个维度不能综合量化时,可以借助Skyline剪枝规则计算最优解的集合。
由此可见,Skyline剪枝规则是在给定对象集中找出不被别的对象所优于的对象集合。若一个对象A在所有维度都不被另一个对象B所优于,并且对象A至少在一个维度上优于对象B,则称对象A优于对象B。因此,在Skyline剪枝规则中,维度的选择以及在每个维度上的优于关系定义是非常重要的,会直接影响Skyline剪枝规则的计算效果。
图2示出的是本公开实施例提供的访问数据库表的方法的流程示意图。下面结合图2,对本公开实施例提供的Skyline剪枝规则以及Skyline剪枝规则的使用方式进行更为详细地举例说明。应理解,图2所示的方法200可以由数据库执行,例如可以由数据库中的优化器执行。该数据库可以是普通的数据库,也可以是分布式数据,如OceanBase数据库。下面对图2所示的方法200中的各个步骤进行详细说明。
在步骤S210,接收第一数据库查询语句。该第一数据库查询语句例如可以是SQL语句。该第一数据库查询语句可用于访问数据库表。数据库表具有N条访问路径。该N条访问路径一一对应N个索引,其中N为大于1的正整数。应理解,主表也可以视为一个索引,即主键索引,因此,在一些实施例中,该N个索引中可以包括主键索引。
在步骤S220,根据第一数据库查询语句,采用Skyline剪枝规则比较N个索引的优劣,以从N个索引中选取目标索引。
例如,假设N条访问路径一一对应的N个索引为:<idx_1,idx_2,idx_3……idx_n>,如果对于第一数据库查询语句,索引idx_x在Skyline剪枝规则定义的维度上优于(dominate)idx_y, 则可以提前把索引idx_y剪掉,不让它参与后续的运算。
步骤S220中提到的目标索引可以指最终选择的用于访问数据库表的索引。目标索引例如可以是N个索引中的最优索引。
在一些实施例中,如果采用Skyline剪枝规则比较N个索引的优劣之后,只有一个索引没有被剪掉,则该索引即为目标索引。
在另一些实施例中,如果采用Skyline剪枝规则比较N个索引的优劣之后,得到了M个索引(M为大于1且小于等于N的正整数)。接着,可以根据M个索引对应的访问路径的代价,从M个索引中选取目标索引。M个索引对应的访问路径的代价的计算方式可以参见相关技术。作为一个例子,可以基于数据库系统的统计信息计算M个索引对应的访问路径的扫描的行数、回表的行数、投影的列数、谓词的个数等因素中的一种或多种,从而计算出M个索引对应的访问路径的代价。在得到M个索引对应的访问路径的代价之后,在一些实施例中,可以将代价最小的索引作为目标索引。
在步骤S230,针对第一数据库查询语句,采用目标索引对应的访问路径访问数据库表。例如,可以利用第一数据库查询语句查询目标索引,从而达到访问数据库表中的数据的目的。
前文提到,在Skyline剪枝规则中,用于比较不同索引优劣的维度以及每个维度下的优于关系的定义是非常关键的,能够直接决定Skyline剪枝规则的剪枝效果的好坏。下面给出Skyline剪枝规则的三种可能的维度,以及每种维度下的优于关系的定义方式。需要说明的是,下文提供的三种维度仅仅是一个示例。可以根据数据库的类型以及实际需要定义比以下三种维度更多或更少的维度,或者将以下三种维度中的某个或某些维度替换成其他维度。
第一维度:回表
第一维度是与回表关联的维度。对于一个数据库查询语句和索引,如果该数据库查询语句需要查询的列在索引上都存在,那么这个索引就不需要回表;如果该数据库查询语句需要查询的某个或某些列在该索引上不存在,则需要回表(回到主表)。
作为一种可能的实现方式,在第一维度中,可以比较不同索引是否需要回表。例如,假设前文提到的N个索引包括第一索引和第二索引,则在Skyline剪枝规则中,第一索引和第二索引在第一维度的优劣关系可以被定义为:针对第一数据库查询语句,如果采用第一索引对应的访问路径访问数据库表时不需要回表,而采用第二索引对应的访问路径访问数据库表时需要回表,则第一索引优于第二索引。
第二维度:有用序
第二维度是与有用序关联的维度。一个索引的序(即索引中的数据的排序)是有用的当且仅当该序对后续算子的分配有用。或者说,该索引的序可以被后续算子利用,从而使得后续算子的执行性能更优。例如,只要能利用该索引的序,那么就不需要对底层扫描的行做排序,还可以消除某些算子(如Merge Group By、Distinct、Window Fucntion、Set等算子)中的排序算子,从而提高执行效率。
这里提到的后续算子指的是TableScan算子之后的算子,该TableScan算子的输出即为索引,该TableScan算子输出的行的排序即为索引的序。该后续算子例如可以包括以下算子中的一种或多种:Join,Group By,Window Function,Order By,Union。
作为一种可能的实现方式,在第二维度中,可以比较不同索引能够最大利用的序。例如,假设前文提到的N个索引包括第一索引和第二索引,第一索引能够提供的有用序向量为第一向量,第二索引能够提供的有用序向量为第二向量,第一向量包含n个元素,第二向量包含m个元素,在边际线剪枝规则中,第一索引和第二索引在第二维度的优劣关系被定义为:针对第一数据库查询语句,如果n大于m,且第一向量的前m个元素与第二向量中的m个元素相同,则第一索引优于第二索引。
下面给出一个更为具体的示例。
首先,创建一张名称为skyline的表:
create table skyline (pk int primary key, v1 int, v2 int, v3 int, v4int, v5 int, key idx_v1_v3_v5(v1, v3, v5));
从上述表格创建语句可以看出,该表包括索引idx_v1_v3_v5,且索引idx_v1_v3_v5包括主表中的如下字段(或列):v1,v3和v5。
其次,创建一张名称为tmp的表:
create table tmp (c1 int primary key, c2 int, c3 int);
接着,执行如下数据库查询语句,并显示该数据库查询语句的执行计划。
explain
SELECT DISTINCT v1, v3
FROM skyline, tmp
WHERE skyline.v1 = tmp.c1
ORDER BY v1, v3;
union
select c1, c2 from tmp;
|ID|OPERATOR |NAME |EST. ROWS|COST |
----------------------------------------------------------------
|0 |MERGE UNION DISTINCT| |199000 |147208|
|1 | MERGE JOIN | |99000 |103467|
|2 | TABLE SCAN |skyline(idx_v1_v3_v5)|100000 |38681 |
|3 | TABLE SCAN |tmp |100000 |38681 |
|4 | TABLE SCAN |tmp |100000 |38681 |
=========================================================
Outputs & filters:
-------------------------------------
0 - output([UNION([1])], [UNION([2])]), filter(nil)
1 - output([skyline.v1], [skyline.v3]), filter(nil),
equal_conds([skyline.v1 = tmp.c1]), other_conds(nil)
2 - output([skyline.v1], [skyline.v3]), filter(nil),
access([skyline.v1], [skyline.v3]), partitions(p0)
3 - output([tmp.c1]), filter(nil),
access([tmp.c1]), partitions(p0)
4 - output([tmp.c1], [tmp.c2]), filter(nil),
access([tmp.c1], [tmp.c2]), partitions(p0)
从上述执行计划中可以看出,数据库查询语句中的Order By子句被消除了,同时MERGE DISTINCT、UNION等算子也没有执行排序操作。也就是说,从底层TABLE SCAN算子输出的索引的序可以被上层的算子使用。换句话说,保留idx_v1_v3_v5的行的顺序,可以让后续算子在保序的情况下执行更优的操作。
Skyline剪枝规则对有用序的判断,可以充分考虑各个索引能够最大利用的序,例如上述索引的最大的序是v1和v3而不仅仅是v1,它从MERGE JOIN输出的序(v1, v3)可以被MERGE DISINCT算子利用, 也可以被最后的UNION DISTINCT算子利用。
如果在索引idx_A上抽取出来的有用序是向量Va <a1, a2, a3 ...an>,在索引idx_B上抽出来的有用序是向量Vb <b1, b2, b3...bm>, 如果n > m , 并且对于ai = bi(i=1..m), 那么在第二维度上,可以认为索引idx_A优于idx_B。
第三维度:查询范围(Query Range)
某些数据库(如OceanBase)定义了查询范围的概念。查询范围可以用于定义索引扫描开始和索引扫描结束的位置。查询范围的确定(或抽取)可以方便数据库系统快速的定位索引扫描开始和结束的位置,从而避免扫描全表。对于一个索引,能用于确定查询范围的列(或称前缀列)越多,那么通常来讲,该索引的扫描性能就会越好。
第三维度可以是与查询范围关联的维度。例如,前文提到的N个索引包括第一索引和第二索引,在Skyline剪枝规则中,第一索引和第二索引在第二维度的优劣关系可以被定义为:针对第一数据库查询语句,如果第一索引中的能够用于确定查询范围的列的集合为第二索引中的能够用于确定查询范围的列的集合的超集,则第一索引优于第二索引。例如,如果索引idx_A中的能够用于确定(或抽取)查询范围的列集合是Sa<a1, a2, a3 ...an>,索引idx_B中的能够用于确定(或抽取)查询范围的列集合是Sb<b1, b2, b3...bm> , 如果Sa是Sb的超集(superset),那么在第三维度上,可以认为索引idx_A优于idx_B。
作为一个具体的例子,首先创建名称为t1的表:
create table t1 (pk int primary key, a int, b int,c int, key idx_b_c(b, c), key idx_a_b(a, b))。
从上述创建表的语句可以看出,除了主表之外,该表还包含索引idx_b_c和idx_a_b。
然后,假设数据库需要执行如下数据库查询语句:
select b from t1 where a = 100 and b > 2000;
则针对该数据库查询语句,索引idx_b_c中的能够用于确定查询范围的列为(b),索引idx_a_b中的能够用于确定查询范围的列为(a, b),所以在第三维度上,索引idx_a_b优于idx_b_c。
下面结合具体例子,更加详细地描述本公开实施例。应注意,下面的例子仅仅是为了帮助本领域技术人员理解本公开实施例,而非要将本公开实施例限于所例示的具体数值或具体场景。本领域技术人员根据所给出的例子,显然可以进行各种等价的修改或变化,这样的修改或变化也落入本公开实施例的范围内。
首先,创建一张名称为skyline的表:
create table skyline (pk int primary key, v1 int, v2 int, v3 int, v4int, v5 int, key idx_v1_v3_v5(v1, v3, v5), key idx_v3_v4(v3, v4));
从上述创建表的语句可以看出,除了主表(或称主键索引)之外,该表还包括如下索引:idx_v1_v3_v5和idx_v3_v4。
接着,数据库接收到如下数据库查询语句:
select max(v5) from skyline where v1 = 100 and v3 > 200 group by v1;
基于前文提到的三个维度比较主键索引、idx_v1_v3_v5和idx_v3_v4,可以得到如下结论:
索引 | 第一维度(是否需要回表) | 第二维度(有用序) | 第三维度(能够用于确定查询范围的列) |
主键索引 | 不需要 | 无 | 无 |
idx_v1_v3_v5 | 不需要 | (v1) | (v1,v3) |
idx_v3_v4 | 需要 | 无 | (v3) |
通过上述结论可以看出,索引idx_v1_v3_v5在三个维度上都不比主键索引或索引idx_v3_v4差, 所以本公开实施例提供的Skyline剪枝规则会直接剪掉主键索引和索引idx_v3_v4,未被剪掉的索引idx_v1_v3_v5即为目标索引,可以基于该目标索引执行上述数据库查询语句。
上文结合图1至图2,详细描述了本公开的方法实施例,下面结合图3至图4,详细描述本公开的装置实施例。应理解,方法实施例的描述与装置实施例的描述相互对应,因此,未详细描述的部分可以参见前面方法实施例。
图3是本公开一个实施例提供的访问数据库表的装置的结构示意图。图3的装置300可以包括接收模块310、选取模块320以及访问模块330。
接收模块310用于接收第一数据库查询语句。所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数。
选取模块320用于根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引。
访问模块330用于针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
可选地,在一些实施例中,所述选取模块用于根据所述第一数据库查询语句,采用所述边际线剪枝规则比较所述N个索引的优劣,得到M个索引,其中M为大于1且小于等于N的正整数;根据所述M个索引对应的访问路径的代价,从所述M个索引中选取所述目标索引。
可选地,在一些实施例中,所述边际线剪枝规则定义了用于比较不同索引优劣的至少一个维度,所述至少一个维度包括以下维度中的部分或全部:与回表关联的第一维度;与有用序关联的第二维度;以及与查询范围关联的第三维度。
可选地,在一些实施例中,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第一维度的优劣关系被定义为:针对所述第一数据库查询语句,如果采用所述第一索引对应的访问路径访问所述数据库表时不需要回表,而采用所述第二索引对应的访问路径访问所述数据库表时需要回表,则所述第一索引优于所述第二索引。
可选地,在一些实施例中,所述N个索引包括第一索引和第二索引,所述第一索引能够提供的有用序向量为第一向量,所述第二索引能够提供的有用序向量为第二向量,所述第一向量包含n个元素,所述第二向量包含m个元素,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第二维度的优劣关系被定义为:针对所述第一数据库查询语句,如果n大于m,且所述第一向量的前m个元素与所述第二向量中的m个元素相同,则所述第一索引优于所述第二索引。
可选地,在一些实施例中,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第三维度的优劣关系被定义为:针对所述第一数据库查询语句,如果所述第一索引中的能够用于确定查询范围的列的集合为所述第二索引中的能够用于确定查询范围的列的集合的超集,则所述第一索引优于所述第二索引。
图4是本公开另一实施例提供的访问数据库表的装置的结构示意图。图4所述的访问数据库表的装置400可以包括存储器410和处理器420,存储器410可以用于存储指令。处理器420可以用于执行存储器410中存储的指令,以实现前文描述的各个方法中的步骤。在一些实施例中,该装置400还可以包括网络接口430,处理器420与外部设备的数据交换可以通过该网络接口430实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其他任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本公开实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如数字视频光盘(digital video disc,DVD))、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以意识到,结合本公开实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。
在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种访问数据库表的方法,包括:
接收第一数据库查询语句,其中所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数;
根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引;
针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
2.根据权利要求1所述的方法,所述根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引,包括:
根据所述第一数据库查询语句,采用所述边际线剪枝规则比较所述N个索引的优劣,得到M个索引,其中M为大于1且小于等于N的正整数;
根据所述M个索引对应的访问路径的代价,从所述M个索引中选取所述目标索引。
3.根据权利要求1所述的方法,所述边际线剪枝规则定义了用于比较不同索引优劣的至少一个维度,所述至少一个维度包括以下维度中的部分或全部:
与回表关联的第一维度;
与有用序关联的第二维度;以及
与查询范围关联的第三维度。
4.根据权利要求3所述的方法,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第一维度的优劣关系被定义为:针对所述第一数据库查询语句,如果采用所述第一索引对应的访问路径访问所述数据库表时不需要回表,而采用所述第二索引对应的访问路径访问所述数据库表时需要回表,则所述第一索引优于所述第二索引。
5.根据权利要求3所述的方法,所述N个索引包括第一索引和第二索引,所述第一索引能够提供的有用序向量为第一向量,所述第二索引能够提供的有用序向量为第二向量,所述第一向量包含n个元素,所述第二向量包含m个元素,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第二维度的优劣关系被定义为:针对所述第一数据库查询语句,如果n大于m,且所述第一向量的前m个元素与所述第二向量中的m个元素相同,则所述第一索引优于所述第二索引。
6.根据权利要求3所述的方法,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第三维度的优劣关系被定义为:针对所述第一数据库查询语句,如果所述第一索引中的能够用于确定查询范围的列的集合为所述第二索引中的能够用于确定查询范围的列的集合的超集,则所述第一索引优于所述第二索引。
7.一种访问数据库表的装置,包括:
接收模块,用于接收第一数据库查询语句,其中所述第一数据库查询语句用于访问所述数据库表,所述数据库表具有N条访问路径,所述N条访问路径一一对应N个索引,N为大于1的正整数;
选取模块,用于根据所述第一数据库查询语句,采用边际线剪枝规则比较所述N个索引的优劣,以从所述N个索引中选取目标索引;
访问模块,用于针对所述第一数据库查询语句,采用所述目标索引对应的访问路径访问所述数据库表。
8.根据权利要求7所述的装置,所述选取模块用于根据所述第一数据库查询语句,采用所述边际线剪枝规则比较所述N个索引的优劣,得到M个索引,其中M为大于1且小于等于N的正整数;根据所述M个索引对应的访问路径的代价,从所述M个索引中选取所述目标索引。
9.根据权利要求7所述的装置,所述边际线剪枝规则定义了用于比较不同索引优劣的至少一个维度,所述至少一个维度包括以下维度中的部分或全部:
与回表关联的第一维度;
与有用序关联的第二维度;以及
与查询范围关联的第三维度。
10.根据权利要求9所述的装置,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第一维度的优劣关系被定义为:针对所述第一数据库查询语句,如果采用所述第一索引对应的访问路径访问所述数据库表时不需要回表,而采用所述第二索引对应的访问路径访问所述数据库表时需要回表,则所述第一索引优于所述第二索引。
11.根据权利要求9所述的装置,所述N个索引包括第一索引和第二索引,所述第一索引能够提供的有用序向量为第一向量,所述第二索引能够提供的有用序向量为第二向量,所述第一向量包含n个元素,所述第二向量包含m个元素,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第二维度的优劣关系被定义为:针对所述第一数据库查询语句,如果n大于m,且所述第一向量的前m个元素与所述第二向量中的m个元素相同,则所述第一索引优于所述第二索引。
12.根据权利要求9所述的装置,所述N个索引包括第一索引和第二索引,在所述边际线剪枝规则中,所述第一索引和所述第二索引在所述第三维度的优劣关系被定义为:针对所述第一数据库查询语句,如果所述第一索引中的能够用于确定查询范围的列的集合为所述第二索引中的能够用于确定查询范围的列的集合的超集,则所述第一索引优于所述第二索引。
13.一种访问数据库表的装置,包括:
存储器,用于存储指令;
处理器,用于执行所述存储器中存储的指令,以执行如权利要求1-6中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210282520.0A CN114372065A (zh) | 2022-03-22 | 2022-03-22 | 访问数据库表的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210282520.0A CN114372065A (zh) | 2022-03-22 | 2022-03-22 | 访问数据库表的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114372065A true CN114372065A (zh) | 2022-04-19 |
Family
ID=81145414
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210282520.0A Pending CN114372065A (zh) | 2022-03-22 | 2022-03-22 | 访问数据库表的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114372065A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115203248A (zh) * | 2022-09-14 | 2022-10-18 | 云和恩墨(北京)信息技术有限公司 | 数据库表空间的快速查询方法及装置 |
-
2022
- 2022-03-22 CN CN202210282520.0A patent/CN114372065A/zh active Pending
Non-Patent Citations (1)
Title |
---|
不详: "物理优化 - 索引的选择 - 《TiDB v5.0 用户文档》", 《HTTPS://DOCS.PINGCAP.COM/ZH/TIDB/V5.2/CHOOSE-INDEX》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115203248A (zh) * | 2022-09-14 | 2022-10-18 | 云和恩墨(北京)信息技术有限公司 | 数据库表空间的快速查询方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11977541B2 (en) | Systems and methods for rapid data analysis | |
US10983994B2 (en) | Partition access method for query optimization | |
CN112559554B (zh) | 一种查询语句优化方法及装置 | |
US7774336B2 (en) | Adaptively reordering joins during query execution | |
US5899986A (en) | Methods for collecting query workload based statistics on column groups identified by RDBMS optimizer | |
US8103658B2 (en) | Index backbone join | |
US10769123B2 (en) | Workload-driven recommendations for Columnstore and Rowstore indexes in relational databases | |
US9524317B2 (en) | Optimization of aggregate queries in database management systems using an early out join when processing min and max functions | |
US9652497B2 (en) | Processing queries using hybrid access paths | |
US7840555B2 (en) | System and a method for identifying a selection of index candidates for a database | |
US20140279853A1 (en) | Method, apparatus, and computer-readable medium for efficiently performing operations on distinct data values | |
US8090700B2 (en) | Method for updating databases | |
US7480662B2 (en) | Fact table storage in a decision support system environment | |
CN103177066A (zh) | 分析和表示人际关系 | |
CN114372065A (zh) | 访问数据库表的方法和装置 | |
US20070220058A1 (en) | Management of statistical views in a database system | |
CN114564501A (zh) | 一种数据库数据存储、查询方法、装置、设备及介质 | |
CN114398378B (zh) | 确定索引代价的方法和装置 | |
US9361359B1 (en) | Accessing schema-free databases | |
CN115809268B (zh) | 一种基于分片索引的自适应查询方法和装置 | |
CN114116729B (zh) | 一种测试数据的处理方法和设备 | |
CN117093611B (zh) | 数据库组合索引建议处理方法、存储介质和计算机设备 | |
CN115374149A (zh) | 基于索引的自适应连接大小估计 | |
CN117009417A (zh) | 一种分析报表生成方法、装置、系统及存储介质 | |
CN117667993A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20220419 |