买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】数据库索引创建方法及装置_阿里巴巴集团控股有限公司_201610920693.5 

申请/专利权人:阿里巴巴集团控股有限公司

申请日:2016-10-21

公开(公告)日:2021-04-09

公开(公告)号:CN107016018B

主分类号:G06F16/22(20190101)

分类号:G06F16/22(20190101);G06F16/242(20190101)

优先权:["20151023 CN 2015106954713"]

专利状态码:有效-授权

法律状态:2021.04.09#授权;2017.08.29#实质审查的生效;2017.08.04#公开

摘要:本申请公开了一种数据库索引创建方法及装置,其中方法包括按如下方式对数据库的每一结构化查询语言SQL语句创建数据库索引:确定一SQL语句中每一查询条件字段的历史元数据;根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引。本申请可以在自动进行数据库索引创建过程中避免业务场景及数据库中无有效数据分布对数据库索引创建的影响。

主权项:1.一种数据库索引创建方法,其特征在于,包括按如下方式对数据库的每一结构化查询语言SQL语句创建数据库索引:确定一SQL语句中每一查询条件字段的历史元数据;根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引;其中,所述确定一SQL语句中每一查询条件字段的历史元数据,包括:对该SQL语句进行解析,获得该SQL语句中查询条件字段;通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据;其中,通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据,包括:查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重,包括:将所述每一查询条件字段的历史平均位置,作为所述每一查询条件字段的权重。

全文数据:数据库索引创建方法及装置技术领域[0001]本申请涉及数据库技术领域,尤其涉及数据库索引创建方法及装置。背景技术[0002]数据库Database按照数据结构来组织、存储和管理数据。数据库索引对数据库表中一列或多列的值进行排序并建立目录,使用数据库索引可以快速访问数据库表中的特定信息。[0003]数据库索引的创建和维护是DBADatabaseAdministrator,数据库管理员)日常业务中不可取代的工作。DBA的主要日常工作之一是SQLStructuredQueryLanguage,结构化查询语言)调优,SQL调优的重要手段之一是给查询慢的SQL建立合适的数据库索引。数据库索引的建立需要对业务场景有一定了解,并需要一定的数据库经验,对业务场景的了解程度和数据库经验的丰富程度对线上应用的性能影响非常巨大。随着业务场景规模的不断扩大,DBA不可能了解所有业务,这样数据库索引的建立就会脱离实际业务需求,造成数据库索引创建的效率不高,随时会影响线上业务应用的正常运转。同时,数据库索引的建立和维护工作也占用了DBA大量时间。[0004]现有技术中提出一种基于有效数据分布的数据库索引自动创建的方案,然而在该方案中数据库索引的建立需要基于数据库中的有效数据分布,并且要求尽量真实模拟线上数据分布,那么在新数据库或者新业务上线的时候,由于没有任务业务数据写入,缺少数据库的有效数据分布,这种基于有效数据分布的数据库索引建立方案就有些缺陷了,二者的矛盾是数据库索引需要业务上线前建立好,而数据库索引的建立又依赖业务中的有效数据分布。发明内容[0005]本申请实施例提供一种数据库索引创建方法,用以在自动进行数据库索引创建过程中避免业务场景及数据库中无有效数据分布对数据库索引创建的影响,该方法包括按如下方式对数据库的每一结构化查询语言SQL语句创建数据库索引:[0006]确定一SQL语句中每一查询条件字段的历史元数据;[0007]根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;[0008]根据所述每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;[0009]根据排序后的查询条件字段为该SQL语句创建数据库索引。[0010]本申请实施例还提供一种数据库索引创建装置,用以在自动进行数据库索引创建过程中避免业务场景及数据库中无有效数据分布对数据库索引创建的影响,该装置包括:[0011]元数据确定模块,用于在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;[0012]权重确定模块,用于根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;[0013]字段排序模块,用于根据所述每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;[0014]索引创建模块,用于根据排序后的查询条件字段为该SQL语句创建数据库索引。[0015]本申请实施例提供一种数据库索引创建方法,用以在自动进行数据库索引创建过程中避免业务场景及数据库中无有效数据分布对数据库索引创建的影响,该方法包括按如下方式对数据库的每一结构化查询语言SQL语句创建数据库索引:[0016]确定一SQL语句中每一查询条件字段的历史元数据;[0017]根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;[0018]根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引。[0019]本申请实施例还提供一种数据库索引创建装置,用以在自动进行数据库索引创建过程中避免业务场景及数据库中无有效数据分布对数据库索引创建的影响,该装置包括:[0020]元数据确定模块,用于在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;[0021]权重确定模块,用于根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;[0022]索引创建模块,用于根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引。[0023]—个实施例中,所述元数据确定模块包括:[0024]解析单元,用于对该SQL语句进行解析,获得该SQL语句中查询条件字段;[0025]第一查询单元,用于通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据。[0026]—个实施例中,所述第一查询单元具体用于:查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;[0027]所述权重确定模块具体用于:将所述每一查询条件字段的历史平均位置,作为所述每一查询条件字段的权重。[0028]一个实施例中,所述索引创建模块具体用于:根据该SQL语句中历史平均位置超过阈值的查询条件字段,为该SQL语句创建数据库索引。[0029]一个实施例中,所述解析单元还用于:在对该SQL语句进行解析时,获得该SQL语句对应的数据库表信息和该SQL语句的数据库连接;[0030]所述元数据确定模块还包括:第二查询单元,用于根据所述数据库连接链接到对应的数据库,在所述数据库中根据所述数据库表信息查找该SQL语句对应的数据库表,获取所述数据库表的已有索引信息;[0031]所述装置进一步包括:[0032]数据判定模块,用于在该SQL语句中查询条件字段未能匹配已有索引信息时,确定所述数据库表中是否有有效数据;[0033]数据处理模块,用于在所述数据库表中有有效数据时,基于所述数据库表中的有效数据分布为该SQL语句创建数据库索引;[0034]创建触发模块,用于在所述数据库表中没有有效数据时,触发所述权重确定模块、字段排序模块及索引创建模块执行相应功能。[0035]一个实施例中,所述第二查询单元还用于在查找到所述数据库表之后,获取所述数据库表的大小;[0036]所述数据判定模块具体用于在该SQL语句中查询条件字段未能匹配已有索引信息,且所述数据库表的大小符合预设条件时,进一步确定所述数据库表中是否有有效数据。[0037]一个实施例中,所述的装置还包括:[0038]元数据字典表处理模块,用于在查询历史元数据字典表之前,统计已有数据库索引对应查询条件字段的历史出现次数和位置,根据查询条件字段的历史出现次数和位置计算查询条件字段的历史平均位置,将查询条件字段的历史平均位置记录于历史元数据字典表中;在为该SQL语句创建数据库索引之后,根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新所述历史元数据字典表。[0039]—个实施例中,所述索引创建模块具体用于:[0040]根据所述每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;[0041]根据排序后的查询条件字段为该SQL语句创建数据库索引。[0042]本申请实施例中,在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;根据每一查询条件字段的权重,为该SQL语句创建数据库索引;从而实现数据库索引的自动创建,创建过程中不需要考虑业务场景,不依赖DBA的数据库经验,也不需要基于数据库中有效数据分布,避免了业务场景及数据库中无有效数据分布对数据库索引创建的影响,提高了数据库索引创建的效率,尤其适用于新业务的上线运行。附图说明[0043]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:[0044]图1为本申请实施例中数据库索引创建方法的原理示意图;[0045]图2为本申请实施例中数据库索引创建方法的处理流程图;[0046]图3为本申请实施例中数据库索引自动创建的一具体实例的示意图;[0047]图4为本申请实施例中另一数据库索引创建方法的原理示意图;[0048]图5为本申请实施例中数据库索引创建装置的示意图;[0049]图6为本申请实施例中图5所示数据库索引创建装置的一具体实例的示意图;[0050]图7为本申请实施例中图5所示数据库索引创建装置的另一具体实例的示意图;[0051]图8为本申请实施例中图5所示数据库索引创建装置的又一具体实例的示意图;[0052]图9为本申请实施例中数据库索引创建装置的示意图;[0053]图10为本申请实施例中图9所示数据库索引创建装置的一具体实例的示意图;[0054]图11为本申请实施例中图9所示数据库索引创建装置的另一具体实例的示意图;[0055]图12为本申请实施例中图9所示数据库索引创建装置的又一具体实例的示意图。具体实施方式[0056]为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本申请实施例做进一步详细说明。在此,本申请的示意性实施例及其说明用于解释本申请,但并不作为对本申请的限定。[0057]发明人经研究发现,SQL语句数据库索引的自动创建是大规模数据库及应用运维发展的必然趋势,并且,无有效数据的数据库索引创建是自动SQL语句优化技术的一个空白点,现有的Oracle和SqlServer的优化工具都是基于线上真实数据运行环境进行SQL分析的,但是线上进行调试又势必会对应用造成影响,所以索引优化工作放在事前是一种更合适更低代价的方案。[0058]因此,本申请实施例中提出一种数据库索引创建方法,该方法基于历史元数据实现数据库索引的自动创建,实现在无有效数据情况下的SQL自动优化,其中无有效数据例如可以包括数据库中的数据分布不符合线上实际运行场景的情况,比如数据库中虽然有数据,但是这些数据都是测试数据,对创建数据库索引没有参考价值。该方法基于历史元数据建立数据库索引不需要考虑业务场景,有效地利用了历史元数据所反映的数据库索引创建规律,是一种普适的方案。该方法不但在一定程度上解放了DBA的日常工作,而且也有效的防止了新业务不经过优化直接上线带来的性能问题。[0059]图1为本申请实施例中数据库索引创建方法的原理图。如图1所示,在本申请实施例中,对于数据库的每一SQL语句,首先确定出该SQL语句中的每一查询条件字段,图1中以该SQL语句包括查询条件字段1〜5为例进行说明;对于查询条件字段1〜5,分别确定出查询条件字段1的历史元数据1,查询条件字段2的历史元数据2,查询条件字段3的历史元数据3,查询条件字段4的历史元数据4,查询条件字段5的历史元数据5;然后对每一查询条件字段,根据历史元数据计算权重,得到查询条件字段1的权重1,查询条件字段2的权重2,查询条件字段3的权重3,查询条件字段4的权重4,查询条件字段5的权重5;最后根据每一查询条件字段的权重,即权重1〜5为该SQL语句创建数据库索引。[0060]图2为本申请实施例中数据库索引创建方法的处理流程图。如图2所示,本申请实施例中数据库索引创建方法可以包括对数据库的每一SQL语句按如下方式创建数据库索引:[0061]步骤201、确定一SQL语句中每一查询条件字段的历史元数据;[0062]步骤202、根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;[0063]步骤203、根据每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;[0064]步骤204、根据排序后的查询条件字段为该SQL语句创建数据库索引。[0065]元数据是数据库表结构中最小的单位,是每一个字段和索引的相关信息。对SQL语句中查询条件字段的历史元数据进行分析,可以找到为SQL语句创建数据库索引的相关规律,并依赖这些规律作为新建数据库索引的判断依据。SQL语句中查询条件字段的历史元数据可以存储于一历史元数据字典表中。历史元数据字典表中所采集的历史元数据是大规模数据自动化运维的经验产物,历史元数据字典表的维护为大规模运维提供了保障和决策依据,其生成也依赖大规模数据的应用场景。历史元数据字典表是一份非常重要的资产数据,不仅为下游依赖应用提供相关数据,也是大规模自动化产品一个重要决策手段。历史元数据字典表中存储的历史元数据可以包括所有业务数据库中所有数据库表的索引信息,所有数据库表的查询条件字段名称及类型,所有数据库表的索引结构对应的查询条件字段等数据。[0066]具体在确定SQL语句中查询条件字段的历史元数据时,可以先对该SQL语句进行解析,获得该SQL语句中查询条件字段;再通过查询历史元数据字典表,确定该SQL语句中查询条件字段的历史元数据。实施例中,可以通过查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;后续在根据查询条件字段的历史元数据确定查询条件字段的权重时,可以将每一查询条件字段的历史平均位置作为每一查询条件字段的权重。[0067]在查询历史元数据字典表之前,统计已有数据库索引对应查询条件字段的历史出现次数和位置,根据查询条件字段的历史出现次数和位置计算查询条件字段的历史平均位置,将查询条件字段的历史平均位置记录于历史元数据字典表中。历史元数据字典表可以定期或不定期地根据历史创建的数据库索引进行更新,不断重新计算查询条件字段的历史平均位置,以确保在每次查询时所获得的查询条件字段历史平均位置的准确性。具体在计算查询条件字段的历史平均位置时,举个例子,在历史元数据字典表中统计出已有全部数据库索引对应全部查询条件字段的历史出现次数(count以及出现时所在的位置position,根据查询条件字段的历史出现次数(count以及出现时所在的位置position则可以计算出该查询条件字段的历史平均位置positioncxjiimm,例如可以按如下公式进行计算:[0068][0069]下表给出一些查询条件字段的历史平均位置和历史出现次数的具体取值示例:[0070][0071][0072]其中p〇Siti〇nccli_越接近1,说明这个查询条件字段在历史数据库索引对应的查询条件字段中越容易放在第1位,对应Positionc^umn相同的查询条件字段,其count值越大,说明该查询条件字段越容易出现在历史数据库索引对应的查询条件字段中,那么其越应该出现在新的数据库索引对应的查询条件字段里。[0073]同时对于一个查询条件字段,如果它的count值为0,并且这个查询条件字段在历史元数据字典表中没有出现过,那么说明它是一个新字段,则给该查询条件字段一个配置好的DEFAULT值,用来与后续的查询条件字段进行权重大小比较,以便于创建数据库索引。[0074]对于一个查询条件字段,如果它的count值为0,并且这个查询条件字段在历史元数据字典表中出现过,那么说明它在历史数据库索引中常常不用来作为对应的查询条件字段,则给该查询条件字段一个配置好的Max值,用来与后续的查询条件字段进行权重大小比较,以便于创建数据库索引。[0075]在历史元数据字典表事先计算并存储了查询条件字段的历史平均位置之后,通过查询历史元数据字典表即可获得SQL语句中每一查询条件字段的历史平均位置,从而确定SQL语句中每一查询条件字段的权重。在具体根据每一查询条件字段的权重,为该SQL语句创建数据库索引时,可以只根据该SQL语句中历史平均位置超过阈值的查询条件字段为该SQL语句创建数据库索引,当然实施时也可以根据需要基于该SQL语句中的全部查询条件字段的权重为该SQL语句创建数据库索引。[0076]在根据每一查询条件字段的权重为该SQL语句创建数据库索引时,可以先根据每一查询条件字段的权重对该SQL语句中查询条件字段进行排序;再根据排序后的查询条件字段为该SQL语句创建数据库索引。下面给出一个按权重对SQL语句中查询条件字段进行排序的具体例子。本例中,比如本次SQL语句的查询条件字段有Sf=ColumnhColumn2,columM,columru,columns,分别通过查询历史元数据字典表计算得出每个查询条件字段的历史平均位置:columni的历史平均位置为2,Column2的历史平均位置为I,columns的历史平均位置为1.2,column4的历史平均位置为Max,column5的历史平均位置为4,column5的count为100,columm的count为1000,那么将每个查询条件字段的历史平均位置作为每个查询条件字段的权重,得出如下权重大小关系历史平均位置越靠前权重越大):column2column33〇1111111113〇1111111153〇111111114,这里只取历史平均位置超过一定阈值的查询条件字段本次阈值设为3,那么数据库索引创建的对应查询条件字段排序为columm,ColumM和columm。[0077]在按权重对SQL语句中查询条件字段进行排序后,则可以根据排序后的查询条件字段为SQL语句创建数据库索引。显然,为SQL语句创建数据库索引的过程中是依据查询条件字段的历史元数据来进行,由此基于历史元数据实现了数据库索引的自动创建,巧妙地采用了历史元数据所反映的数据库索引创建的特点作为查询条件字段重排序的判别依据。创建过程中并未利用业务场景,也未利用数据库中有效数据分布,提高了数据库索引创建的效率,也适于新业务的上线运行。[0078]实施例中也可以将本申请实施例基于历史元数据的数据库索引自动创建与基于有效数据分布的数据库索引自动创建相结合,进一步提高数据库索引创建的效率。例如可以配合基于有效数据分布进行索引自动创建及整套IDB的SQLreivew工具提供一个完整的SQL语句数据库索引自动创建方案。[0079]具体的,可以在前述对SQL语句进行解析时,还获得该SQL语句对应的数据库表信息和该SQL语句的数据库连接;根据数据库连接链接到对应的数据库,在数据库中根据数据库表信息查找该SQL语句对应的数据库表,获取数据库表的已有索引信息;其中的数据库表信息可以是数据库表名等数据库表的标识信息。然后,进一步判断该SQL语句中查询条件字段是否能匹配已有索引信息,若能匹配已有索引信息,则以相匹配的已有索引信息为该SQL语句创建数据库索引,若不能匹配已有索引信息,则可以基于历史元数据进行数据库索引自动创建;当然,一种可能的情况是,如果该数据库表中有有效数据,此时可以基于该数据库表中的有效数据分布为该SQL语句建立数据库索引;如果该数据库表中没有有效数据,则仍旧按图2所示流程基于历史元数据进行数据库索引自动创建。基于历史元数据进行数据库索引自动创建可以是针对事前SQL优化提供的一套新业务无有效数据情况的解决方案,如果数据库中有一定业务数据,可以基于有效数据分布计算出对应的字段权重,以此建立数据库索引。[0080]实施例中还可以在查找到SQL语句对应的数据库表之后,还获取该数据库表的大小;当该SQL语句中查询条件字段未能匹配已有索引信息时,再判断该数据库表的大小是否符合预设条件。该预设条件可以是触发基于字段规则进行数据库索引自动创建的条件,可以根据实际情况设置具体的条件参数。当该数据库表的大小符合预设条件,再进一步确定该数据库表中是否有有效数据,从而基于有效数据分布或历史元数据进行数据库索引自动创建。[0081]实施例中,在为SQL语句创建数据库索引之后,还可以根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新历史元数据字典表,重新计算全部已有数据库索引对应全部查询条件字段的历史平均位置。这样通过对历史元数据字典表的同步实时更新,可以确保每一次查询所获得历史元数据结果的准确性。[0082]下面举一具体实例说明本申请实施例中数据库索引创建方法的具体实施。图3为本例中数据库索引自动创建的过程示意图。图3中示出了针对单条SQL语句自动计算查询条件字段权重,并根据查询条件字段权重对查询条件字段重排序,最后依据重排序后的查询条件字段生成一条最优的索引建立脚本。具体的,如图3所示,本例中数据库索引创建的过程可以包括:[0083]步骤301、对SQL语句进行预处理,解析获得该SQL语句对应的数据库表名、该SQL语句中查询条件字段、以及该SQL语句的数据库连接,再根据获得的数据库连接链接到对应的数据库,在该数据库中根据数据库表名查到该SQL语句对应的数据库表,获取数据库表的大小和已有索引信息。[0084]步骤302、检查该SQL语句中的查询条件字段能否匹配到已有索引信息。若能匹配已有索引信息,则以相匹配的已有索引信息为该SQL语句创建数据库索引,若不能匹配已有索引信息,则执行步骤303。[0085]步骤303、检查该数据库表的大小是否符合触发基于历史元数据进行数据库索引自动创建的条件,如果符合,则进一步确认该数据库表中是否有有效数据,如果该数据库表中有有效数据可以基于该数据库表中的有效数据分布为该SQL语句建立数据库索引;如果没有则继续执行步骤304。[0086]步骤304、查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;将每一查询条件字段的历史平均位置,作为每一查询条件字段的权重。[0087]步骤305、根据每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序。[0088]步骤306、根据排序后的查询条件字段为该SQL语句创建数据库索引。具体在创建时,还可以依据数据库表名来进行,即实施时可以依据排序后的查询条件字段和数据库表名来为该SQL语句创建数据库索引。[0089]步骤307、在为该SQL语句创建数据库索引之后,根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新历史元数据字典表。[0090]在另外的实施例中,根据每一查询条件字段的权重为该SQL语句创建数据库索引还可能有其它的实施方式,例如也可以不对该SQL语句中查询条件字段进行排序,而是直接选取该SQL语句中权重较大的几个查询条件字段,为该SQL语句创建数据库索引。也可以既进行查询条件字段排序又通过阈值选取权重较大的来进行数据库索引的创建。基于此,如图4所示,本申请实施例中还提供一种数据库索引创建方法,该方法可以包括对数据库的每一SQL语句按如下方式创建数据库索引:[0091]步骤401、确定一SQL语句中每一查询条件字段的历史元数据;[0092]步骤402、根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;[0093]步骤403、根据每一查询条件字段的权重,为该SQL语句创建数据库索引。[0094]本申请实施例中还提供了一种数据库索引创建装置,如下面的实施例所述。由于该装置解决问题的原理与数据库索引创建方法相似,因此该装置的实施可以参见数据库索引创建方法的实施,重复之处不再赘述。[0095]图5为本申请实施例中数据库索引创建装置的示意图。如图5所示,该数据库索引创建装置可以包括:[0096]元数据确定模块501,用于在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;元数据确定模块501是图5所示数据库索引创建装置中负责完成历史元数据确定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0097]权重确定模块502,用于根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;权重确定模块502是图5所示数据库索引创建装置中负责完成字段权重确定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0098]字段排序模块503,用于根据每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;字段排序模块503是图5所示数据库索引创建装置中负责完成字段排序功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0099]索引创建模块504,用于根据排序后的查询条件字段为该SQL语句创建数据库索弓丨。索引创建模块504是图5所示数据库索引创建装置中负责完成索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0100]图6为本申请实施例中图5所示数据库索引创建装置的具体实例图。如图6所示,本例中数据库索引创建装置中元数据确定模块501可以包括:[0101]解析单元601,用于对该SQL语句进行解析,获得该SQL语句中查询条件字段;解析单元601是图6所示元数据确定模块501中负责完成SQL语句解析功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0102]第一查询单元602,用于通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据。第一查询单元602是图6所示元数据确定模块501中负责完成历史元数据查询功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0103]在一个实施例中,第一查询单元602具体可以用于:查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;[0104]权重确定模块502具体可以用于:将每一查询条件字段的历史平均位置,作为每一查询条件字段的权重。[0105]在一个实施例中,字段排序模块503具体可以用于:对该SQL语句中历史平均位置超过阈值的查询条件字段,按权重进行排序。[0106]在一个实施例中,解析单元601还可以用于:在对该SQL语句进行解析时,获得该SQL语句对应的数据库表信息和该SQL语句的数据库连接;[0107]如图7所示,本例中数据库索引创建装置的元数据确定模块501还可以包括:第二查询单元701,用于根据数据库连接链接到对应的数据库,在数据库中根据数据库表信息查找该SQL语句对应的数据库表,获取数据库表的大小和已有索引信息;第二查询单元701是图7所示元数据确定模块501中负责完成数据库表查询功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0108]如图7所示,本例中数据库索引创建装置可以进一步包括:[0109]数据判定模块702,用于在该SQL语句中查询条件字段未能匹配已有索引信息,且数据库表的大小符合预设条件时,确定数据库表中是否有有效数据;数据判定模块702是图7所示数据库索引创建装置中负责完成数据判定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0110]数据处理模块703,用于在数据库表中有有效数据时,基于数据库表中的有效数据分布为该SQL语句创建数据库索引;数据处理模块703是图7所示数据库索引创建装置中负责完成基于有效数据分布进行数据库索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0111]创建触发模块704,用于在数据库表中没有有效数据时,触发权重确定模块502、字段排序模块503及索引创建模块504执行相应功能。创建触发模块704是图7所示数据库索引创建装置中负责完成触发基于历史元数据进行数据库索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0112]如图8所示,在一个实施例中,图7所示数据库索引创建装置还可以包括:[0113]元数据字典表处理模块801,用于在查询历史元数据字典表之前,统计已有数据库索引对应查询条件字段的历史出现次数和位置,根据查询条件字段的历史出现次数和位置计算查询条件字段的历史平均位置,将查询条件字段的历史平均位置记录于历史元数据字典表中;在为该SQL语句创建数据库索引之后,根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新历史元数据字典表。[0114]图9为本申请实施例中数据库索引创建装置的示意图。如图9所示,该数据库索引创建装置可以包括:[0115]元数据确定模块901,用于在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;元数据确定模块901是图9所示数据库索引创建装置中负责完成历史元数据确定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0116]权重确定模块902,用于根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;权重确定模块902是图9所示数据库索引创建装置中负责完成字段权重确定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0117]索引创建模块903,用于根据每一查询条件字段的权重为该SQL语句创建数据库索弓丨。索引创建模块903是图9所示数据库索引创建装置中负责完成索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0118]图10为本申请实施例中图9所示数据库索引创建装置的具体实例图。如图10所示,本例中数据库索引创建装置中元数据确定模块901可以包括:[0119]解析单元1001,用于对该SQL语句进行解析,获得该SQL语句中查询条件字段;解析单元1001是图10所示元数据确定模块901中负责完成SQL语句解析功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0120]第一查询单元1002,用于通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据。第一查询单元1002是图10所示元数据确定模块901中负责完成历史元数据查询功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0121]在一个实施例中,第一查询单元1002具体可以用于:查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;[0122]权重确定模块902具体可以用于:将每一查询条件字段的历史平均位置,作为每一查询条件字段的权重。[0123]在一个实施例中,索引创建模块903具体可以用于:根据该SQL语句中历史平均位置超过阈值的查询条件字段,为该SQL语句创建数据库索引。[0124]在一个实施例中,解析单元1001还可以用于:在对该SQL语句进行解析时,获得该SQL语句对应的数据库表信息和该SQL语句的数据库连接;[0125]如图11所示,本例中数据库索引创建装置的元数据确定模块901还可以包括:第二查询单元1101,用于根据数据库连接链接到对应的数据库,在数据库中根据数据库表信息查找该SQL语句对应的数据库表,获取数据库表的已有索引信息;第二查询单元1101是图11所示元数据确定模块901中负责完成数据库表查询功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0126]如图11所示,本例中数据库索引创建装置可以进一步包括:[0127]数据判定模块1102,用于在该SQL语句中查询条件字段未能匹配已有索引信息时,确定数据库表中是否有有效数据;数据判定模块1102是图11所示数据库索引创建装置中负责完成数据判定功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0128]数据处理模块1103,用于在数据库表中有有效数据时,基于数据库表中的有效数据分布为该SQL语句创建数据库索引;数据处理模块1103是图11所示数据库索引创建装置中负责完成基于有效数据分布进行数据库索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件;[0129]创建触发模块1104,用于在数据库表中没有有效数据时,触发权重确定模块902及索引创建模块903执行相应功能。创建触发模块1104是图11所示数据库索引创建装置中负责完成触发基于历史元数据进行数据库索引创建功能的部分,可以是软件、硬件或二者的结合,例如可以是完成该提供功能的处理芯片等元器件。[0130]在一个实施例中,第二查询单元1101还可以用于在查找到数据库表之后,获取数据库表的大小;数据判定模块1102具体可以用于在该SQL语句中查询条件字段未能匹配已有索引信息,且数据库表的大小符合预设条件时,进一步确定数据库表中是否有有效数据。[0131]如图12所示,在一个实施例中,图11所示数据库索引创建装置还可以包括:[0132]元数据字典表处理模块1201,用于在查询历史元数据字典表之前,统计已有数据库索引对应查询条件字段的历史出现次数和位置,根据查询条件字段的历史出现次数和位置计算查询条件字段的历史平均位置,将查询条件字段的历史平均位置记录于历史元数据字典表中;在为该SQL语句创建数据库索引之后,根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新历史元数据字典表。[0133]在一个实施例中,索引创建模块903具体可以用于:根据每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;根据排序后的查询条件字段为该SQL语句创建数据库索引。[0134]综上所述,本申请实施例中,在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;根据每一查询条件字段的历史元数据,确定每一查询条件字段的权重;根据每一查询条件字段的权重,为该SQL语句创建数据库索引;从而实现数据库索引的自动创建,创建过程中不需要考虑业务场景,不依赖DBA的数据库经验,也不需要基于数据库中有效数据分布,避免了业务场景及数据库中无有效数据分布对数据库索引创建的影响,提高了数据库索引创建的效率,尤其适用于新业务的上线运行。[0135]本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。[0136]本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和或方框图来描述的。应理解可由计算机程序指令实现流程图和或方框图中的每一流程和或方框、以及流程图和或方框图中的流程和或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和或方框图一个方框或多个方框中指定的功能的装置。[0137]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和或方框图一个方框或多个方框中指定的功能。[0138]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和或方框图一个方框或多个方框中指定的功能的步骤。[0139]以上的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本申请的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

权利要求:1.一种数据库索引创建方法,其特征在于,包括按如下方式对数据库的每一结构化查询语言SQL语句创建数据库索引:确定一SQL语句中每一查询条件字段的历史元数据;根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引。2.如权利要求1所述的方法,其特征在于,所述确定一SQL语句中每一查询条件字段的历史元数据,包括:对该SQL语句进行解析,获得该SQL语句中查询条件字段;通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据。3.如权利要求2所述的方法,其特征在于,所述通过查询历史元数据字典表,确定该SQL语句中每一查询条件字段的历史元数据,包括:查询历史元数据字典表,获得该SQL语句中每一查询条件字段的历史平均位置;根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重,包括:将所述每一查询条件字段的历史平均位置,作为所述每一查询条件字段的权重。4.如权利要求3所述的方法,其特征在于,根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引,包括:根据该SQL语句中历史平均位置超过阈值的查询条件字段,为该SQL语句创建数据库索引。5.如权利要求2、3或4所述的方法,其特征在于,在对该SQL语句进行解析时,还获得该SQL语句对应的数据库表信息和该SQL语句的数据库连接;根据所述数据库连接链接到对应的数据库,在所述数据库中根据所述数据库表信息查找该SQL语句对应的数据库表,获取所述数据库表的已有索引信息;在该SQL语句中查询条件字段未能匹配已有索引信息时,进一步确定所述数据库表中是否有有效数据;若有,则基于所述数据库表中的有效数据分布为该SQL语句创建数据库索弓丨;若无,则仍旧根据所述每一查询条件字段的权重为该SQL语句创建数据库索引。6.如权利要求5所述的方法,其特征在于,在查找到所述数据库表之后,还获取所述数据库表的大小;所述在该SQL语句中查询条件字段未能匹配已有索引信息时,进一步确定所述数据库表中是否有有效数据,包括:在该SQL语句中查询条件字段未能匹配已有索引信息,且所述数据库表的大小符合预设条件时,进一步确定所述数据库表中是否有有效数据。7.如权利要求5所述的方法,其特征在于,在查询历史元数据字典表之前,统计已有数据库索引对应查询条件字段的历史出现次数和位置,根据查询条件字段的历史出现次数和位置计算查询条件字段的历史平均位置,将查询条件字段的历史平均位置记录于历史元数据字典表中;在为该SQL语句创建数据库索引之后,根据所创建数据库索引对应的该SQL语句中查询条件字段的元数据,更新所述历史元数据字典表。8.如权利要求1所述的方法,其特征在于,根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引,包括:根据所述每一查询条件字段的权重,对该SQL语句中查询条件字段进行排序;根据排序后的查询条件字段为该SQL语句创建数据库索引。9.一种数据库索引创建装置,其特征在于,包括:元数据确定模块,用于在对数据库的每一SQL语句创建数据库索引时,确定一SQL语句中每一查询条件字段的历史元数据;权重确定模块,用于根据所述每一查询条件字段的历史元数据,确定所述每一查询条件字段的权重;索引创建模块,用于根据所述每一查询条件字段的权重,为该SQL语句创建数据库索引。

百度查询: 阿里巴巴集团控股有限公司 数据库索引创建方法及装置

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。