一种自动创建索引的方法、装置及数据库系统与流程

文档序号:15271808发布日期:2018-08-28 22:31阅读:207来源:国知局

本发明涉及数据库技术领域,尤其涉及一种自动创建索引的方法、装置及数据库系统。



背景技术:

关系数据库是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。随着信息技术发展,数据已经渗透到各个行业和应用中,关系数据库在各行各业得到了广泛应用。

目前数据库技术条件下,数据库应用模型是通过如下方式进行建立的:通过分析数据的逻辑关系,设计表结构;通过分析应用对数据库的使用场景,预先估计可能的sql语句有哪些,分析可能的查询条件,而后选取表的一个或者多个列作为索引字段创建索引。可知索引是根据设计者经验预先创建好的。而随着时间的推移,人们对数据使用的需求是变化多样的。例如:节假日可能需要通过新的查询sql语句,年底报表可能需要新的复杂报表sql语句,系统需要与之对应的索引。

可知,当前的关系数据库的索引在创建时,依据是需求收集和设计者经验能力。如果需求收集可能不准确、设计者能力参差不齐,都有可能导致索引不准确、不合理,效率低下。并且,索引是在系统设计之初手工创建或者后期通过升级的方式手工优化调整,索引灵活性也相对较低。而随着现实世界数据特征的不断变化,对于那些数据结构复杂,数据量大的情况,统称为大数据,目前的针对关系数据库的索引创建方法已经满足不了人们对数据的处理效率和灵活性更高的要求。



技术实现要素:

本发明提供一种自动创建索引的方法、装置及数据库系统,用以解决现有的索引创建方法中创建效率低和灵活性低的问题。

为实现上述发明目的,本发明采用下述的技术方案;

依据本发明的一个方面,提供一种自动创建索引的方法,包括:

分析数据查询语句中的目标数据表以及操作条件;

判断是否需要分析数据分布,当判断需要分析时,计算所述目标数据表中满足所述操作条件的表数据的分布情况;

当所述表数据的分布情况满足预设的索引创建策略时,将所述操作条件创建为所述目标数据表的索引。

优选地,分析数据查询语句中的目标数据表以及操作条件,具体包括:

对所述数据查询语句进行语法检查,判断所述数据查询语句是否为无效语句;

当判定为有效语句时,根据所述数据查询语句的语法规则获取所述目标数据表以及所述操作条件。

优选地,判断是否需要分析数据分布,具体包括:

获取所述索引创建策略的创建依据,根据所述创建依据判断所述目标数据表是否在预设的数据表白名单中;

当存在时,则继续根据所述创建依据判断是否需要分析数据分布,否则,禁止对所述目标数据表继续创建索引。

优选地,计算所述目标数据表中满足所述操作条件的表数据的分布情况,具体包括:

读取预设的表数据扫描策略;

根据所述扫描策略从所述目标数据表中获取满足所述操作条件的表数据;

根据预设统计方法计算所述表数据的分布情况。

优选地,当所述表数据的分布情况满足预设的索引创建策略时,将所述操作条件创建为所述目标数据表的索引,具体包括:

根据所述表数据的分布情况获取各个操作条件的筛选效率,按照筛选效率高低将所述操作条件进行排序,将排序后的所述操作条件建立复合索引;

以所述复合索引的先导创建单一索引;

判断所述复合索引和所述单一索引的结果集占比是否大于预设阈值时:当大于时,则将所述单一索引作为所述目标数据表的索引;否则,将所述复合索作为所述目标数据表的索引。

优选地,所述将所述操作条件创建为所述目标数据表的索引之后,所述方法还包括:

实时监测数据查询语句和/或数据库中的数据表的是否有变化,当监测到有变化时,则根据变化情况确定建立索引或者删除索引。

优选地,所述方法还包括:

当判断不需要分析数据分布时,则直接将所述操作条件创建所述目标数据表的索引。

优选地,所述操作条件包括where筛选、groupby分组、orderby排序中的任意一种或多种操作所对应的条件。

依据本发明的一个方面,提供一种自动创建索引的装置,包括:

分析单元,用于分析数据查询语句中的目标数据表以及操作条件;

计算单元,用于判断是否需要分析数据分布,当判断需要分析时,计算所述目标数据表中满足所述操作条件的表数据的分布情况;

创建单元,用于当所述表数据的分布情况满足预设的索引创建策略时,将所述操作条件创建为所述目标数据表的索引。

优选地,所述分析单元,具体用于:

对所述数据查询语句进行语法检查,判断所述数据查询语句是否为无效语句;

当判定为有效语句时,根据所述数据查询语句的语法规则获取所述目标数据表以及操作条件。

优选地,所述计算单元,具体用于:

判断是否需要分析数据分布时,获取所述索引创建策略的创建依据,根据所述创建依据判断所述目标数据表是否在预设的数据表白名单中;

当存在时,则继续根据所述创建依据判断是否需要分析数据分布,否则,禁止对所述目标数据表继续创建索引。

优选地,所述计算单元,具体用于:

读取预设的表数据扫描策略;

根据所述扫描策略从所述目标数据表中获取满足所述操作条件的表数据;

根据预设统计装置计算所述表数据的分布情况。

优选地,所述创建单元,具体用于:

根据所述表数据的分布情况获取各个操作条件的筛选效率,按照筛选效率高低将所述操作条件进行排序,将排序后的所述操作条件建立复合索引;

以所述复合索引的先导创建单一索引;

判断所述复合索引和所述单一索引的结果集占比是否大于预设阈值时:当大于时,则将所述单一索引作为所述目标数据表的索引;否则,将所述复合索作为所述目标数据表的索引。

优选地,所述装置还包括监测单元,用于:

将所述操作条件创建为所述目标数据表的索引之后,实时监测数据查询语句和/或数据库中的数据表的是否有变化,当监测到有变化时,则根据变化情况确定建立索引或者删除索引。

优选地,所述创建单元,还用于:

当判断不需要分析数据分布时,则直接将所述操作条件创建所述目标数据表的索引。

优选地,所述操作条件包括where筛选、groupby分组、orderby排序中的任意一种或多种操作所对应的条件。

依据本发明的一个方面,提供一种数据库系统,包括上述所述的自动创建索引的装置。

本发明有益效果如下:

本发明提供的自动创建索引的方法、装置及数据库系统,通过过分析当前的sql语句的组成结构,基于表数据在表中的分布情况,自动创建索引供sql语句使用。相对于现有的人工分析预估创建索引的方法,准确性更高,能提高sql语句执行效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例所提供的自动创建索引方法的流程图;

图2为本发明提供的insert语句执行流程示意图;

图3为本发明提供的新的sql语句执行流程示意图;。

图4为本发明实施例所提供的自动创建索引装置的结构示意图;

图5为本发明提供的数据发布模型示意图;

图6为本发明提供的数据消费模型示意图。

具体实施方式

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

本发明实施例提供一种自动创建索引的方法,如图1所示,具体包括如下步骤:

步骤s101,分析数据查询语句中的目标数据表以及操作条件;

这里,数据查询语句为sql语句。当检测到系统启动创建索引命令后,自动获取sql语句。其中,数据来源方式可以是从应用程序获取,也可是从数据库相关数据字典表中获取。对于一张数据表,需要尽可能多地获取相关的所有sql语句,以便建立高效全面的索引。

在分析获取的sql语句时,将符合ansisql语法的sql语句进行拆分,重点考虑sql执行效率相关组成部分。拆分后的sql语句包括目标数据表名以及操作条件。其中,重点相关操作包括where筛选、groupby分组、orderby排序操作所对应的条件。分析结果按数据表进行分类保存。

优选的,在分析数据查询语句中的目标数据表以及操作条件,具体包括:

提前读取表结构信息,预先对sql语句进行语法检查,当判定为有效语句时,再根据数据查询语句的语法规则获取目标数据表以及操作条件;当判定为无效语句时,则不再对数据查询语句进行分析。通过预先排除无效sql语句,可以有效提高创建索引的速度。

步骤s102,判断是否需要分析数据分布,当判断需要分析时,计算目标数据表中满足操作条件的表数据的分布情况。

其中,在判断是否需要分析数据分布,具体包括:

获取索引创建策略的创建依据,根据创建依据判断目标数据表是否在预设的数据表白名单中;当存在时,则继续根据创建依据判断是否需要分析数据分布,否则,禁止对目标数据表继续创建索引。

这里,索引创建策略是创建索引专家知识(创建索引所要满足的条件或者规则),是预先制定好的,可以定期维护,增加修改和删除。这里的创建策略包括依据sql语句、依据sql语句和数据分布以及依据预先定义的规则。当然还可以其他可预设的策略,这里不做具体的限定。

其中,当创建索引的依据sql语句时,不需要分析数据分布时,则将所要操作的字段作为目标数据表的索引。例如,按键值查询的sql语句,需要以where条件字段建立索引即可。当创建索引的依据是sql语句和数据分布,增加对表数据分布考虑,并根据具体的分布情况确定如何建立高效索引;当创建索引的依据还可以是预先定义的规则,根据预设规则判断是否需要建立索引。例如根据应用的实际运行情况,对于频繁插入数据的表,禁止创建索引。

其中,在计算目标数据表中满足操作条件的表数据的分布情况,具体包括:

读取预设的表数据扫描策略;

根据扫描策略从目标数据表中获取满足操作条件表数据;

根据预设统计方法计算表数据的分布情况。

这里的扫描策略包括触发条件和/或扫描粒度等信息。其中,触发条件可以是定时扫描,可以是新sql语句触发。通过设定触发条件,当需要运行新的sql语句发生改变,系统能自动创建与之对应的索引,或者删除不再需要的索引。扫描粒度可以是全部扫描,可以是按照数据百分比采样。

而计算的表数据分布情况时,基于表组成结构,分析数据在表中的分布情况。分析数据包括操作的字段,每个字段的数据类型,每个字段数据的分布,数据的基数。数据的分布情况包括数据分成几个列(所属字段),以及每个列数据的最大、最小、平均、方差等统计信息,也可以是数据的离散分布情况。这里不做过多的限定。这里的读取扫描和计算可以合并进行,充分利用数据库的关系运算能力。计算后的结果同样按数据表分类保存,具体到每个列。

步骤s103,当表数据的分布情况满足预设的索引创建策略时,则将操作条件创建为目标数据表的索引。

这里的索引创建策略是需要进一步结合具体的数据分布情况确定是否满足预设建立条件,当满足时,才可以进一步创建。预设建立条件是如何确保建立索引的高效索引的条件,具体如下:

根据表数据的分布情况获取各个操作条件的筛选效率,按照筛选效率高低将操作条件进行排序,将排序后的操作条件建立复合索引;

以复合索引的先导创建单一索引;

判断复合索引和单一索引的结果集占比是否大于预设阈值时:当大于时,则将单一索引作为目标数据表的索引;否则,将复合索作为目标数据表的索引。

这里的复合索引是指包括多个操作条件的索引,而复合索引的先导是指筛选效率最高的操作条件建立的单一索引。后面将以具体的实施例对上述索引建立的方式进行说明。本发明中通过结合数据分布情况创建索引,可以使得sql语句执行效率最高。

基于上述可知,本发明所提供的自动创建索引的方法,通过分析当前的sql语句的组成结构,基于表数据在表中的分布情况,自动创建索引供sql语句使用。相对于现有的人工分析预估创建索引的方法,准确性更高,能提高sql语句执行效率。

下面结合具体的实施例对本发明自动创建索引的方法进行说明。以用户呼叫过程为例,信息记录在呼叫日志表中,需要对呼叫日志进行查询。如表1所示,用户呼叫日志表calllog主要字段包括:流水号、主叫号码、被叫号码、开始时刻、结束时刻、详情等。

表1

系统需要满足话务员对某个用户在某个时间段内的详情查询。例如,根据主叫号码查询某天的呼叫日志表,获取到的sql语句是:

select*fromcalllogwherecno=’15800000000’

andsdate>=’2016-02-0100:00:00’

andsdate<’2016-02-0200:00:00’

拆分sql语句后,分成以下几个部分:

查询表名是calllog。

where条件部分是:

返回字段列表:*,代表所有字段。

分析sql语句后,同时在两个字段上筛选,结果分别是:

字段cno,单值筛选,操作条件是:cno等于15800000000;

字段sdate,范围筛选,操作条件是:sdate在区间[2016-02-0100:00:00,2016-02-0200:00:00)。

接着,计算数据在表及其列上的分布,根据sql分析结果,考虑主叫号码、开始时间两个字段。例如,计算结果如表2所示:

表2

在本实施例中,分析索引模块结合sql分析结果、数据分布结果,涉及多个字段,读取对应的策略并做如下过程分析:

策略一:多个筛选条件情况下,筛选效率高的放在最前面,效率更高

由于条件一结果占比是0.0005%,筛选效率高,条件二结果占比是1.9%,筛选效率低,所以字段在索引中的先后顺序是:cno、sdate。因此,考虑到所有筛选情况的索引是:索引一,calllog(cno,sdate)。

策略二:以复合索引的先导也可以创建索引,但是不可以同时存在。所以,还可以创建一个索引,是:索引二,calllog(cno)

策略三:通常情况下,筛选记录数结果集占比大于预设阈值,这里大于15%,筛选效率较低,不建议创建索引。从条件一到条件三,结果记录数比=5/460=1.1%。经过比较,由于筛选效率小于15%,筛选效率高,所以索引一是建议的索引,索引二不可同时存在,不建议使用索引二。经过分析,最终建议的索引是:索引一,calllog(cno,sdate)。

本发明实施例所提供的自动创建索引的方法,为了能使索引增加删除更加灵活,在当索引创建完成之后,还包括:

实时监测数据查询语句和/或数据库中的数据表的是否有变化,当监测到有变化时,则根据变化情况确定建立索引或者删除索引。

当监控到数据库数据表中数据的变化,例如,数据的基数或者数据分布等有变化,重新计算表数据在表中的分布情况。计算方式可以是增量计算,也可以是全量计算。根据重新计算后的数据分布情况重新建立索引。

如图2所示,以insert语句执行流程为例进行说明,包括以下步骤:

步骤s201,启动数据采集。

步骤s202,执行insert语句。数据库应用程序从数据源采集到数据集后,封装成insert语句,然后发送给数据库执行。执行成功后,数据保存到数据库表中。

步骤s203,计算数据分布。检测数据库中表数据的变化,重新计算数据在表中的分布指标。计算的方式可以配置策略,例如可以是增量计算,也可以是全量计算。应当不显著影响系统性能。计算结果将作为自动创建索引的依据。

步骤s204,结束。

如图3所示,新的sql语句执行流程示意图,该方法主要包括以下步骤:

步骤s301,开始。

步骤s302,分析新的sql语句需要的索引。通过分析sql语句where筛选条件部分、groupby分组部分、orderby排序部分,找出需要如何创建索引,才能使sql语句效率最高。

步骤s303,基于表索引定义信息,判断是否存在对应的索引。如果否,则需要创建索引,进行步骤s304;如果是,则执行sql语句,无需重新创建索引,进行步骤s305。

步骤s304,自动创建索引。需要注意的是,为了不影响系统性能,步骤s340可以是异步的,无需等待执行结果,进行步骤s370。

步骤s305,执行sql语句。数据库执行sql语句,将计算结果返回给数据库应用程序。

步骤s306,结束。

基于上述可知,本发明当需要运行新的sql语句发生改变,系统能自动创建与之对应的索引,删除不再需要的索引;当数据分布不一样,列中数据基数不一样,自动创建索引的方法始终能自动适应这种变化,删除不再适合的索引,创建有效索引。

本发明实施例还提供了一种自动创建索引装置,如图4所示,包括:

分析单元41,用于分析数据查询语句中的目标数据表以及操作条件;

计算单元42,用于判断是否需要分析数据分布,当判断需要分析时,计算目标数据表中满足操作条件的表数据的分布情况;

创建单元43,用于当表数据的分布情况满足预设的索引创建策略时,将操作条件创建为目标数据表的索引;当判断不需要分析数据分布时,则直接将操作条件创建目标数据表的索引。

其中,操作条件包括where筛选、groupby分组、orderby排序中的任意一种或多种操作所对应的条件。

进一步地,分析单元41,具体用于:

对数据查询语句进行语法检查,判断数据查询语句是否为无效语句;

当判定为有效语句时,根据数据查询语句的语法规则获取目标数据表以及操作条件。

进一步地,计算单元42,具体用于:

判断是否需要分析数据分布时,获取索引创建策略的创建依据,根据创建依据判断目标数据表是否在预设的数据表白名单中;

当存在时,则继续根据创建依据判断是否需要分析数据分布,否则,禁止对目标数据表继续创建索引。

进一步地,计算单元42,具体用于:

读取预设的表数据扫描策略;

根据扫描策略从目标数据表中获取满足操作条件的表数据;

根据预设统计装置计算表数据的分布情况。

进一步地,创建单元43,具体用于:

根据表数据的分布情况获取各个操作条件的筛选效率,按照筛选效率高低将操作条件进行排序,将排序后的操作条件建立复合索引;

以复合索引的先导创建单一索引;

判断复合索引和单一索引的结果集占比是否大于预设阈值时:当大于时,则将单一索引作为目标数据表的索引;否则,将复合索作为目标数据表的索引。

进一步地,该装置还包括监测单元,用于:

将操作条件创建为目标数据表的索引之后,实时监测数据查询语句和/或数据库中的数据表的是否有变化,当监测到有变化时,则根据变化情况确定建立索引或者删除索引。

本发明还提供了一种数据库系统,该系统包括上述实施例中的自动创建索引装置。该系统可以应用于数据发布模型和数据消费模型中。

参考图5,本发明提供的数据发布模型的结构示意图,数据库应用程序作为发布者角色使用,更加简单化。数据发布模型包括以下部分:

发布者(数据库应用程序):数据库应用程序功能是从数据源采集数据集,发送给数据库系统。

数据库:保存数据集,进行数据管理。

自动创建索引装置:用于执行上述的自动创建索引方法。

对于该模型中各个部分的指定流程,可以参考上述图2中的执行顺序,这里不做进行说明。

参考图6,本发明提供的数据消费模型的结构示意图。数据库系统建立后,数据源的数据采集到系统后,可以提供给应用程序使用,数据消费模型使用场景是对数据库中的数据进行查询、修改和删除。该消费模型包括以下部分:

消费者(数据库应用程序):将用户的数据使用请求转换为查询/修改/删除等类型sql语句,发送给数据库系统执行,并返回结果。

自动创建索引装置:获取sql语句,如果没有需要的索引,自动创建索引。同时监控数据库中数据的变化,如果数据发生变化,重新计算数据在表中的分布指标。

数据库:将保存的数据计算后,返回给应用程序。

对于该模型中各个部分的指定流程,可以参考上述图3中的执行顺序,这里不做进行说明。

本发明所提供的数据库系统,优化数据库设计,对数据的操作包括存储和使用两个方面。存储数据的时候,应用程序属于数据的发布者;在使用数据的时候,应用程序属于数据的消费者。作为发布者,重点关注数据结构;作为消费者,更加关注索引。采用本发明后,自动分析sql语句的组成结构,基于表组成结构和数据在表中的分布情况,自动创建索引供sql语句使用,消费者不再受限于系统建设初期固定的索引的局限性,数据库设计将更加合理。在大数据环境下,数据量大,后期数据使用需求未知或多变,本发明的有益效果将更加明显。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,相关之处参见方法实施例的部分说明即可。并且,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

另外,本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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