CN105320679B - 一种数据表索引集合生成方法及装置 - Google Patents
一种数据表索引集合生成方法及装置 Download PDFInfo
- Publication number
- CN105320679B CN105320679B CN201410331106.XA CN201410331106A CN105320679B CN 105320679 B CN105320679 B CN 105320679B CN 201410331106 A CN201410331106 A CN 201410331106A CN 105320679 B CN105320679 B CN 105320679B
- Authority
- CN
- China
- Prior art keywords
- field
- fields
- data table
- information
- combined
- 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 37
- 238000004458 analytical method Methods 0.000 claims description 21
- 238000012216 screening Methods 0.000 claims description 7
- 238000013461 design Methods 0.000 description 9
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000011156 evaluation Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种数据表索引集合生成方法,包括:扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;从数据库中采集应用程序运行时用到的SQL信息;对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合。本发明还同时公开了一种数据表索引集合生成装置。
Description
技术领域
本发明涉及数据性能优化技术领域,尤其涉及一种数据表索引集合生成方法及装置。
背景技术
现有的索引设计评估方法,主要是根据设计者设计的索引字段的选择性,或应用程序在计算机系统上运行时的性能分析来进行的粗略评估。如:某设计者在某个表上的几个字段建立了索引,如果是基于代价优化器的数据库引擎产品,则可以在相关表有了一定量数据后,采用数据库的指令对表进行表分析,从而获取相关索引字段的唯一值数(相当于字段的数量),将唯一值数与相关索引字段的总行数比较,就可以判断出索引字段的选择性好坏;或是,通过结构化查询语言(SQL,Structured Query Language)性能分析工具分析特定应用程序访问数据库的SQL语句在数据库运行时的性能情况,来判定索引设计的是否合理,这里,主要判定要素为数据库优化器计算的通过索引访问表的代价。
但是,现有判断索引设计合理性的方法仍存在不足,主要包括:
1、通过索引字段选择性判断的方法,无法识别某些特定场景。如,在选择性好的字段上建立了索引,但实际应用程序在运行中却较少用到该字段进行查询,表面上此种情况通过字段选择性判断索引是合理的,但实际情况却并非如此。并且,所建立的索引属于冗余的、不需要的数据,该索引的存在会增加相关应用程序在做数据操作时的CPU资源消耗,降低应用程序的性能,浪费存储资源。
2、通过采集应用程序访问数据库SQL的性能数据进行分析评估的情况,可以评估某些索引对特定应用程序的设计合理性。如,使用某个索引应用程序效率很慢,新建一个索引并采用后应用程序效率变快了。但是,这种方式只是根据一段时间内运行的应用程序得到的索引,没有考虑其他未运行的应用程序。因此,这种方式无法评估一个系统中全部应用程序对索引访问的索引集合,上述第1点中所采用的方法也面临同样的问题。
发明内容
有鉴于此,本发明实施例期望提供一种数据表索引集合生成方法及装置,至少能解决现有索引建立方法中存在的索引效率低的缺陷。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种数据表索引集合生成方法,所述方法包括:
扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;
从数据库中采集应用程序运行时用到的SQL信息;
对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合。
优选地,所述根据所述统计信息对字段选择性信息表进行更新包括:
根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
优选地,所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数;N为待分析数据表记录总数。
优选地,所述SQL信息包括SQL语句、SQL执行计划和SQL语句的执行次数。
优选地,对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中包括:
从所述SQL信息中解析出检索字段和SQL执行计划;
根据所述检索字段和SQL执行计划得到所述SQL语句的执行次数和/或SQL语句的关联查询执行次数;
将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。
优选地,所述根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合包括:
根据所述字段选择性信息表中字段的选择率对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
对排序后的开头字段相同的字段和/或组合字段进行合并;
通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
本发明实施例还提供了一种数据表索引集合生成装置,所述装置包括:
字段选择率初始化单元,用于扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;
SQL信息采集单元,用于从数据库中采集应用程序运行时用到的SQL信息;
SQL执行信息解析单元,用于对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
数据表索引集合生成单元,用于根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合。
优选地,所述字段选择率初始化单元包括:
字段选择率计算模块,用于根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
字段选择性信息表更新模块,用于将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
优选地,所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数;N为待分析数据表中记录总数。
优选地,所述SQL执行信息解析单元包括:
解析模块,用于从所述SQL信息中解析出检索字段和SQL执行计划;
关联查询执行次数模块,用于根据所述检索字段和SQL执行计划得到所述SQL语句的执行次数和/或SQL语句的关联查询执行次数;
组合字段频次表更新模块,用于将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。
优选地,所述数据表索引集合生成单元包括:
字段按选择率排序模块,用于根据所述字段选择性信息表中字段的选择率对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
字段合并单元,用于对排序后的开头字段相同的字段和/或组合字段进行合并;
数据表索引集合生成模块,用于通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
本发明实施例所提供的数据表索引集合生成方法及装置,通过获取待分析数据表统计信息变更对字段选择性信息表进行更新,能提高字段选择性信息表中各字段选择率的精度;通过对运行的应用程序使用的所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的查询次数和/或SQL语句的关联查询执行次数信息,并更新至组合字段频次表;通过字段选择性信息表和组合字段频次表对多个字段组合进行排序及合并,对筛选后的组合字段建立数据表索引,能得到当前设定周期内的最优的数据表索引集合;如此,就能够去除无效字段和低效字段,相应地,也去除了无效索引和低效索引,提升了应用系统在当前设定周期内的整体性能,节约了存储资源;并且,能够使访问待分析数据表上的应用程序达到最优的访问状态。
附图说明
图1为本发明实施例1数据表索引集合生成方法的实现流程示意图;
图2为本发明实施例2数据表索引集合生成装置的组成结构示意图;
图3为本发明实施例3数据表索引集合生成方法的逻辑结构示意图;
图4为本发明实施例3中字段选择率初始化单元功能实现的流程示意图;
图5为本发明实施例3中SQL信息采集单元功能实现的流程示意图;
图6为本发明实施例3中SQL执行信息解析单元功能实现的流程示意图;
图7为本发明实施例3中数据表索引集合生成单元功能实现的流程示意图。
具体实施方式
以下结合说明书附图及具体实施例对本发明的技术方案做进一步的详细阐述。
实施例1
为了解决现有技术存在的技术问题,本实施例提供了一种数据表索引集合生成方法,如图1所示,该方法包括以下步骤:
S101:扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;
这里,可以预先设置扫描周期,在每个扫描周期的开始时刻对待分析数据表在数据库中的统计信息进行扫描;
其中,所述待分析数据表是数据库中已有的表格,包含全部设定周期的所有应用程序用到的字段信息,即:待分析数据表能够反映字段的历史信息;所述字段选择性信息表用于按选择率由高到低的顺序存放字段。
当待分析数据表内的字段信息发生变化时,对应待分析数据表的统计信息也会发生变化;这里,统计信息包括待分析数据表的变化信息,而待分析数据表又包括各种字段,所以,当发现统计信息有更新时,对待分析表的字段选择率进行重新计算,实现对字段选择性信息表的更新;这里,所述字段选择性信息表保存在数据库中。
S102:从数据库中采集应用程序运行时用到的SQL信息;
这里,所采集到的SQL信息可以保存在SQL采集信息表中,进一步的,所述SQL采集信息表保存在数据库中,所述SQL采集信息表包含有当前设定周期内的全部SQL信息。
S103:对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
这里,所述组合字段频次表保存在数据库中,用于存放所述SQL信息对所述待分析数据表的字段和/或组合字段的查询次数信息。
S104:根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合;
这里,通过对待分析数据表的分析得到所述字段选择性信息表;将所述SQL采集信息表和所述对待分析数据表结合分析,得到所述组合字段频次表;
具体的,所述优化包括:查询所述字段选择性信息表和所述组合字段频次表中的字段,得到选择率高的字段,并对选择率高的字段进行合并和筛选,对筛选后的字段建立数据表索引。
本发明实施例通过待分析数据表对字段选择性信息表进行更新,能提高字段选择性信息表中各字段选择率的精度;通过对运行的应用程序使用的所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的查询次数信息,能反应在当前设定周期内字段的选择率;通过字段选择性信息表和组合字段频次表确定待分析数据表中的字段和/或组合字段的字段选择率,并根据字段选择率对多个字段综合分析,能够去除无效字段和低效字段;相应地,也去除了无效索引和低效索引,提升了应用系统的整体性能,节约了存储资源;最终得到的最优的数据表索引,能够使得访问待分析数据表上的应用程序达到最优的访问状态。
具体的,步骤S101根据所述统计信息对字段选择性信息表进行更新,包括:
S1011:根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
这里,所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数。字段的唯一值数是指:一个数据表的某个字段中不同值的数量,如A表的a字段,A表有100条记录,但A表的a字段所有的记录都只有两种取值,则n(i)的值为2;N为待分析数据表记录总数。
S1012:将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
然后,步骤S102中,通过数据库接口可以获取正在运行的SQL信息并保存至SQL采集信息表中;
其中,所述SQL采集信息表包括SQL语句、SQL执行计划和SQL语句的执行次数。
之后,步骤S103中,对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的查询次数信息,将所述查询次数信息更新至组合字段频次表中,包括:
从所述SQL信息中解析出检索字段和SQL执行计划;根据所述检索字段和SQL执行计划得到所述SQL语句的执行次数和/或SQL语句的关联查询执行次数;将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。其中,所述关联查询执行次数是指在对多个数据表(如数据表为嵌套循环关联等)进行查询时,根据数据表连接的SQL执行计划来确定字段的查询次数。
步骤103的详细过程包括:
S1031:读取所述SQL信息中的一条未分析的所述SQL语句,从所述SQL语句中解析出所述SQL语句在所述待分析数据表中的检索字段;
S1032:根据所述检索字段查询所述SQL语句是否和所述待分析数据表相关,若是,则进入步骤S1033;否则进入步骤S1039;
S1033:对所述检索字段进行判断,若所述检索字段为单表查询,则进入步骤S1037;否则,所述检索字段为多表的关联查询,进入步骤S1034;
S1034:查询所述待分析数据表是否为驱动表,若是,且所述SQL语句对应的所述SQL执行计划不是嵌套循环,则进入步骤S1037;否则进入步骤S1035;
S1035:从所述SQL执行计划中解析出关联表的行源数,进入步骤S1036;
S1036:判断所述SQL执行计划是否为嵌套循环,若是,则进入步骤S1038;否则进入步骤S1037;
S1037:获取在设定周期内的所述SQL语句的执行次数,结合所述检索字段更新所述组合字段频次表的信息,进入步骤S1039;
S1038:获取在设定周期内的所述SQL语句的执行次数,将所述SQL语句的执行次数乘以所述关联表的行源数得到SQL语句的关联查询执行次数,结合所述检索字段更新所述组合字段频次表的信息,进入步骤S1039;
S1039:判断是否读取完设定周期内的所述SQL采集信息表的全部所述SQL语句,若是,则结束本处理流程;否则返回步骤S1031。
最后,步骤S104中,根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行分析,得到对应所述待分析数据表的最优的数据表索引集合,包括:
S1041:根据所述字段选择性信息表中字段的选择率,对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
S1042:对排序后的开头字段相同的字段和/或组合字段进行合并;
S1043:通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
步骤S104得到选择率高的字段,并对选择率高的字段进行合并和筛选,对筛选后的字段建立数据表索引,这样,就去除了无效字段和低效字段;相应地,也去除了无效索引和低效索引,提升了应用系统的整体性能,节约了存储资源;得到最优的数据表索引集合后,应用程序通过最优的数据表索引中的字段进行数据访问。根据上面的描述可知,此时的最优的数据表索引集合是去除无效和低效字段后的索引,所以,能够使得应用程序达到最优的访问状态。
实施例2
本实施例和实施例1属于同一发明构思。本实施例提供了一种数据表索引集合生成装置,本实施例的装置结构图如图2所示,该装置包括:
字段选择率初始化单元201,用于扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;
SQL信息采集单元202,用于从数据库中采集应用程序运行时用到的SQL信息;
这里,所采集到的SQL信息可以保存在SQL采集信息表中;所述SQL采集信息表包括SQL语句、SQL执行计划和SQL语句的执行次数;
SQL执行信息解析单元203,用于对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
数据表索引集合生成单元204,用于根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合。
其中,所述字段选择率初始化单元201包括:字段选择率计算模块2011和字段选择性信息表更新模块2012;其中,
字段选择率计算模块2011,用于根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数;N为待分析数据表中记录总数。
字段选择性信息表更新模块2012,用于将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
所述SQL执行信息解析单元203包括:解析模块、关联查询执行次数模块和组合字段频次表更新模块;其中,
解析模块,用于从所述SQL信息中解析出检索字段和SQL执行计划;
关联查询执行次数模块,用于根据所述检索字段和SQL执行计划得到所述SQL语句的执行次数和/或SQL语句的关联查询执行次数;
组合字段频次表更新模块,用于将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。
具体的,所述解析模块包括:
SQL语句解析模块2031,用于读取所述SQL采集信息表中的一条未分析的所述SQL语句,从所述SQL语句中解析出所述SQL语句在所述待分析数据表中的检索字段;
所述关联查询执行次数模块包括:相关性判断模块2032、检索字段判断模块2033、驱动表及循环判断模块2034、行源数解析模块2035和嵌套循环判断模块2036;其中,
相关性判断模块2032,用于查询所述SQL语句是否和所述待分析数据表相关;
检索字段判断模块2033,用于对所述检索字段进行判断;
驱动表及循环判断模块2034,用于查询所述待分析数据表是否为驱动表,及所述SQL语句对应的所述SQL执行计划是否为嵌套循环;
行源数解析模块2035,用于从所述SQL执行计划中解析出关联表的行源数;
嵌套循环判断模块2036,用于判断所述SQL执行计划是否为嵌套循环;
所述组合字段频次表更新模块包括:第一组合字段频次表更新模块2037、第二组合字段频次表更新模块2038;其中,
第一组合字段频次表更新模块2037,用于获取在设定周期内的所述SQL语句的执行次数,结合所述检索字段更新所述组合字段频次表的信息;
第二组合字段频次表更新模块2038,用于获取在设定周期内的所述SQL语句的执行次数,将所述SQL语句的执行次数乘以所述关联表的行源数得到SQL语句的关联查询执行次数,结合所述检索字段更新所述组合字段频次表的信息;
此外,所述组合字段频次表更新模块还可以包括SQL语句查询模块2039,用于判断是否读取完设定周期内的所述SQL采集信息表的全部所述SQL语句。
所述数据表索引集合生成单元204包括:字段按选择率排序模块2041、字段合并单元2042和数据表索引集合生成模块2043;其中,
字段按选择率排序模块2041,用于根据所述字段选择性信息表中字段的选择率对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
字段合并单元2042,用于对排序后的开头字段相同的字段和/或组合字段进行合并;
数据表索引集合生成模块2043,用于通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
各单元及模块的连接关系和实施例1中叙述的相关内容对应,此处不再赘述。
实施例3
本实施例通过一个实际的场景对本发明进行详细说明。
本发明实施例是采用一种新的技术思路对数据表索引设计合理性进行评估及矫正,通过一套按照新的思路设计的程序装置,达到识别一个复杂系统中运行的大量应用程序访问数据表需要的最优索引集合的目的,并通过此种识别方法对应用程序的索引设计现状进行一个评估并矫正。
本实施例的逻辑结构图如图3所示,其基本思路为:
①:字段选择率初始化单元查询有哪些待分析数据表需要识别索引最优集合;
②、③:字段选择率初始化单元通过数据库接口查询这些待分析数据表是否有统计信息,如无统计信息则将根据默认规则进行待分析数据表的字段选择性信息初始化;如有统计信息或统计信息更新,则根据采集到的统计信息进行待分析数据表的字段选择性信息初始化;
④:SQL信息采集单元通过数据库接口采集设定周期内所有在数据库里运行的SQL语句信息并按特定格式存储在SQL采集信息表中;
⑤、⑥:SQL执行信息解析单元从SQL采集信息表中解析需要的信息,主要是字段和/或组合字段及其对应的执行次数,经过加工处理后存入组合字段频次表中。
⑦、⑧和⑨:数据表索引生成单元对组合字段频次表中信息进行分析,并结合字段选择性信息表中的字段选择率,对各种字段和/或组合字段进行合并,并通过用户设定的参数,筛选出符合条件的对应待分析数据表的最优的数据表索引集合。
对应的,数据表索引集合生成装置包括:
字段选择率初始化单元201:该单元定期扫描待分析数据表在数据库中的统计信息变更情况,如发现有待分析数据表增加或原因待分析数据表统计信息更新,则根据采集到的新统计信息计算并更新字段选择性信息表中的对应内容:
字段选择率=待分析表的字段唯一值数/表记录总数。
字段选择率取值(0~1),越接近1则代表选择性越好。
待分析数据表结构如表1所示。
字段名 | 字段类型 | 中文描述 | 详细描述 | 备注 |
ID | NUMBER(14) | 主键 | ||
TABNAME | VARchar2(200) | 表名称 |
表1
得到的字段选择性信息表结构如表2所示。
表2
SQL信息采集单元202:该单元从数据库中采集所有在数据库里运行的SQL语句信息,包括某段时间内的SQL语句内容、SQL执行计划、SQL语句的执行次数,并将相关信息存入SQL采集信息表中。
SQL采集信息表结构如表3所示。
字段名 | 字段类型 | 中文描述 | 详细描述 | 备注 |
ID | NUMBER(14) | 主键 | ||
SQLTEXT | VARchar2(3000) | SQL内容 | ||
SQLPLANTEXT | VARchar2(4000) | SQL执行计划内容 | ||
EXECUTIONS | NUMBER(6) | 执行次数 | ||
STARTTIME | Date | 开始时间 | ||
ENDTIME | Date | 结束时间 |
表3
SQL执行信息解析单元203,该单元是本发明的核心部分,其通过读取SQL采集信息表中的信息,从SQL语句中解析出SQL语句在待分析数据表上的检索字段,并结合对SQL执行计划的解析,SQL语句的执行次数,计算出该SQL在设定周期内对待分析数据表上某几个字段组合进行的查询次数,将查询次数换算成待分析数据表的字段组合频次,并将字段组合频次更新至组合字段频次表中;
待分析表字段组合频次表结构如表4所示。
字段名 | 字段类型 | 中文描述 | 详细描述 | 备注 |
ID | NUMBER(14) | 主键 | ||
TABNAME | VARchar2(200) | 表名称 | ||
COMBILED_CODE | VARchar2(100) | 组合代码 | ||
EXECUTIONS | NUMBER(6) | 执行次数 | ||
STARTTIME | Date | 开始时间 | ||
ENDTIME | Date | 结束时间 |
表4
数据表索引集合生成单元204,该单元通过对组合字段频次表中的信息进行分析,并结合字段选择性信息表中的字段选择率,对各种字段和/或组合字段进行合并,并通过用户设定的参数,筛选出符合条件的最优的数据表索引集合,例如根据符合某索引情况的查询占索引查询总量的比重进行规则过滤,对低于千分之一的情况,如果分析得出相关SQL语句不会引发系统的堵塞,则不需要建立该索引;通过遍历所有的字段和/或组合字段及合并、条件规则过滤后,输出建议的待分析表对应的最优的数据表索引集合。
本发明实施例的详细方法步骤:
字段选择率初始化单元201定期扫描待分析数据表在数据库中的统计信息,如发现有待分析数据表增加或已有待分析表统计信息有更新,则调用数据库接口获取相关信息来更新字段选择性信息表中的信息。例如oracle数据库中,可以通过dba_tab_columns表提取num_distinct字段值,表行数值通过dba_tables里的num_rows字段获取,通过上述信息的获取即可计算出待分析表每个字段的的选择率,其采用的方法流程图如图4所示。
SQL信息采集单元202也是通过数据库提供的接口获取某一时段(设定周期)内,所有在数据库中执行的SQL语句信息,例如在oracle数据库中,通过四个视图v$active_session_history、dba_hist_sqltext、dba_hist_sql_plan、dba_hist_sqlstat的关联查询,采集某段时间内执行的SQL语句内容、SQL语句对应的执行计划内容、SQL语句执行的次数,并将相关信息存储至SQL采集信息表,其采用的方法流程图如图5所示。
SQL执行信息解析单元203通过从SQL采集信息表中解析SQL语句内容,可以获取表名称及检索字段和SQL执行计划,如果是单表的查询,则SQL语句执行的次数就是检索字段执行次数;如果是多表的关联查询(如嵌套循环关联等),则需要解析SQL语句的执行计划,从中解析出哪个表是驱动表,确认被分析数据表所处的位置;如果被分析数据表是驱动表,且执行计划采用的不是嵌套循环,则SQL语句执行次数就是检索字段执行次数。否则需要根据执行计划中解析出的关联表的行源数,乘于SQL语句的执行次数算出检索字段的执行次数,其采用的方法流程图如图6所示。
数据表索引集合生成单元204通过获取组合字段频次表中的组合及频次信息,对字段和/或组合字段首先根据字段选择率高低进行组合内排序,然后对开头字段相同的字段和/或组合字段进行合并。例如,字段A、B、C的组合,A字段选择率最高,B最低。假设有几种组合ABC、BCA、BC、A、C、AC的检索,则通过排序后为ACB、ACB、CB、A、AC,通过合并后剩余ACB、CB两种组合字段。其中,又发现CB组合出现的频度很低,不到所有查询的千分之一,则CB字段组合的查询可以不建立索引,最后最优索引集合为ACB,其采用的方法流程图如图7所示。
本发明实施例可以识别待分析数据表在某段时间(设定周期)内应用程序运行需要的最优数据表索引集合,并可以通过这个最优数据表索引集合来对待分析数据表上的现有索引集合进行评估,发现是否有无效索引、低效索引、缺失了重要信息的索引、或是否需要通过应用设计调整来规避某个选择性不好但却频繁使用的索引,以此来优化现有待分析数据表上的索引集合,从而达到解决减少无效索引、低效索引及应用逻辑设计不合理造成的应用程序数据操作效率低下等技术问题,解决了存储资源浪费、查询性能不佳等问题。
本发明实施例使用户能识别待分析数据表在应用程序运行的某段时间内的最优数据表索引集合,解决了传统索引分析方法只能对单个索引进行独立分析、不能识别最优索引集合的问题。通过调整现有系统无效索引、低效索引,可以使待分析数据表上的应用程序效率达到最优状态,对提升应用系统的整体性能、节约存储资源和系统调优分析工作起到重要的作用。本发明可以单独使用到应用系统的性能调优分析工作中,或集成到调优工具软件中以支撑系统性能分析工作,对软件开发工作也可以对试运行系统进行相应的评估,及时发现索引设计的问题,具备很高的应用价值。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个处理模块中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种数据表索引集合生成方法,其特征在于,所述方法包括:
扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;所述字段选择性信息表用于按照选择率由高到低的顺序存放字段;
从数据库中采集应用程序运行时用到的SQL信息;
对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合;其中,所述对所述待分析数据表中的字段和/或组合字段进行优化,包括:对字段和/或组合字段按选择率由高到低顺序进行排序,对排序后的开头字段相同的字段和/或组合字段进行合并。
2.根据权利要求1所述的方法,其特征在于,所述根据所述统计信息对字段选择性信息表进行更新包括:
根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
3.根据权利要求2所述的方法,其特征在于,所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数;N为待分析数据表记录总数。
4.根据权利要求1所述的方法,其特征在于,所述SQL信息包括SQL语句、SQL执行计划和SQL语句的执行次数。
5.根据权利要求4所述的方法,其特征在于,对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中包括:
从所述SQL信息中解析出检索字段和SQL执行计划;
根据所述检索字段和SQL执行计划得到所述SQL语句的执行次数和/或SQL语句的关联查询执行次数;
将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。
6.根据权利要求5所述的方法,其特征在于,所述根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合包括:
根据所述字段选择性信息表中字段的选择率对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
对排序后的开头字段相同的字段和/或组合字段进行合并;
通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
7.一种数据表索引集合生成装置,其特征在于,所述装置包括:
字段选择率初始化单元,用于扫描待分析数据表在数据库中的统计信息,根据所述统计信息对字段选择性信息表进行更新;所述字段选择性信息表用于按照选择率由高到低的顺序存放字段;
SQL信息采集单元,用于从数据库中采集应用程序运行时用到的SQL信息;
SQL执行信息解析单元,用于对所述SQL信息进行解析,得到所述SQL信息对所述待分析数据表的字段和/或组合字段的字段组合频次,将所述字段组合频次更新至组合字段频次表中;
数据表索引集合生成单元,用于根据所述组合字段频次表和所述字段选择性信息表对所述待分析数据表中的字段和/或组合字段进行优化,得到对应所述待分析数据表的最优的数据表索引集合;其中,所述对所述待分析数据表中的字段和/或组合字段进行优化,包括:对字段和/或组合字段按选择率由高到低顺序进行排序,对排序后的开头字段相同的字段和/或组合字段进行合并。
8.根据权利要求7所述的装置,其特征在于,所述字段选择率初始化单元包括:
字段选择率计算模块,用于根据所述统计信息计算所述待分析数据表中各字段的字段选择率;
字段选择性信息表更新模块,用于将所述字段选择率填入所述字段选择性信息表,实现对所述字段选择性信息表的更新。
9.根据权利要求8所述的装置,其特征在于,所述字段选择率通过p(i)=n(i)/N计算;
其中,p(i)为待分析数据表中第i个字段的字段选择率;n(i)为待分析数据表中第i个字段的唯一值数;N为待分析数据表中记录总数。
10.根据权利要求9所述的装置,其特征在于,所述SQL执行信息解析单元包括:
解析模块,用于从所述SQL信息中解析出检索字段和SQL执行计划;
关联查询执行次数模块,用于根据所述检索字段和SQL执行计划得到SQL语句的执行次数和/或SQL语句的关联查询执行次数;
组合字段频次表更新模块,用于将所述SQL语句的执行次数和/或SQL语句的关联查询执行次数换算成待分析数据表的字段组合频次,并更新至组合字段频次表中。
11.根据权利要求10所述的装置,其特征在于,所述数据表索引集合生成单元包括:
字段按选择率排序模块,用于根据所述字段选择性信息表中字段的选择率对所述组合字段频次表内的字段和/或组合字段按选择率由高到低的顺序进行排序;
字段合并单元,用于对排序后的开头字段相同的字段和/或组合字段进行合并;
数据表索引集合生成模块,用于通过设定参数对合并后的字段和/或组合字段进行筛选,对筛选后的字段和/或组合字段建立索引,得到对应所述待分析数据表的最优的数据表索引集合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410331106.XA CN105320679B (zh) | 2014-07-11 | 2014-07-11 | 一种数据表索引集合生成方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410331106.XA CN105320679B (zh) | 2014-07-11 | 2014-07-11 | 一种数据表索引集合生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105320679A CN105320679A (zh) | 2016-02-10 |
CN105320679B true CN105320679B (zh) | 2019-05-24 |
Family
ID=55248081
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410331106.XA Active CN105320679B (zh) | 2014-07-11 | 2014-07-11 | 一种数据表索引集合生成方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105320679B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239451A (zh) * | 2016-03-28 | 2017-10-10 | 北京京东尚科信息技术有限公司 | 数据库索引创建方法和装置 |
CN107515886B (zh) * | 2016-06-17 | 2020-11-24 | 阿里巴巴集团控股有限公司 | 一种数据表的识别方法、装置和系统 |
CN107562762B (zh) * | 2016-07-01 | 2020-10-27 | 中国联合网络通信集团有限公司 | 数据索引构建方法及装置 |
CN106202403B (zh) * | 2016-07-11 | 2020-03-20 | 浪潮通用软件有限公司 | 一种通过动态分析创建数据库索引的方法 |
CN107818114A (zh) * | 2016-09-14 | 2018-03-20 | 中国移动通信有限公司研究院 | 一种数据处理方法、装置及数据库 |
CN108073612A (zh) * | 2016-11-14 | 2018-05-25 | 平安科技(深圳)有限公司 | 同步sql执行计划的方法和装置 |
CN108268515B (zh) * | 2016-12-30 | 2020-07-31 | 北京国双科技有限公司 | 聚合表维度的选择方法和装置 |
CN106919678A (zh) * | 2017-02-27 | 2017-07-04 | 武汉珞佳伟业科技有限公司 | 一种数据库查询优化系统及方法 |
CN108664481B (zh) * | 2017-03-27 | 2021-03-23 | 中国移动通信集团内蒙古有限公司 | 一种数据检索方法及服务器 |
CN108038135A (zh) * | 2017-11-21 | 2018-05-15 | 平安科技(深圳)有限公司 | 电子装置、多表关联查询的方法及存储介质 |
CN108984698B (zh) * | 2018-07-05 | 2023-06-27 | 福建星瑞格软件有限公司 | 一种数据库业务行为的建模方法 |
CN108920664B (zh) * | 2018-07-05 | 2022-04-15 | 福建星瑞格软件有限公司 | 一种基于索引价值的数据库智能索引实现方法 |
CN109063086A (zh) * | 2018-07-26 | 2018-12-21 | 中兴飞流信息科技有限公司 | 结构化查询语言的执行方法、装置、服务器和存储介质 |
CN112783758B (zh) * | 2019-11-11 | 2024-02-27 | 阿里云计算有限公司 | 测试案例库与特征库生成方法、设备及存储介质 |
CN110909003B (zh) * | 2019-11-25 | 2022-06-10 | 车智互联(北京)科技有限公司 | 一种创建数据表的方法及计算设备 |
CN111427920B (zh) * | 2020-03-16 | 2023-08-11 | 深圳市腾讯计算机系统有限公司 | 数据采集方法、装置、系统、计算机设备及存储介质 |
CN113590632B (zh) * | 2021-08-11 | 2023-12-19 | 北京云拓科技有限公司 | 数据库索引创建方法、装置、设备及介质 |
CN116069777A (zh) * | 2021-11-03 | 2023-05-05 | 中兴通讯股份有限公司 | 索引创建方法、装置和计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5560007A (en) * | 1993-06-30 | 1996-09-24 | Borland International, Inc. | B-tree key-range bit map index optimization of database queries |
CN101059810A (zh) * | 2007-03-16 | 2007-10-24 | 华为技术有限公司 | 一种实现数据库系统自动优化的系统和方法 |
CN103164455A (zh) * | 2011-12-15 | 2013-06-19 | 百度在线网络技术(北京)有限公司 | 数据库的优化方法及装置 |
CN103390066A (zh) * | 2013-08-08 | 2013-11-13 | 上海新炬网络技术有限公司 | 一种数据库全局性自动化优化预警装置及其处理方法 |
CN103810212A (zh) * | 2012-11-14 | 2014-05-21 | 阿里巴巴集团控股有限公司 | 一种数据库索引的自动创建方法及系统 |
-
2014
- 2014-07-11 CN CN201410331106.XA patent/CN105320679B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5560007A (en) * | 1993-06-30 | 1996-09-24 | Borland International, Inc. | B-tree key-range bit map index optimization of database queries |
CN101059810A (zh) * | 2007-03-16 | 2007-10-24 | 华为技术有限公司 | 一种实现数据库系统自动优化的系统和方法 |
CN103164455A (zh) * | 2011-12-15 | 2013-06-19 | 百度在线网络技术(北京)有限公司 | 数据库的优化方法及装置 |
CN103810212A (zh) * | 2012-11-14 | 2014-05-21 | 阿里巴巴集团控股有限公司 | 一种数据库索引的自动创建方法及系统 |
CN103390066A (zh) * | 2013-08-08 | 2013-11-13 | 上海新炬网络技术有限公司 | 一种数据库全局性自动化优化预警装置及其处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105320679A (zh) | 2016-02-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105320679B (zh) | 一种数据表索引集合生成方法及装置 | |
CN103064875B (zh) | 一种服务化空间数据分布式查询方法 | |
US9063973B2 (en) | Method and apparatus for optimizing access path in database | |
Xu et al. | PET: reducing database energy cost via query optimization | |
CN104077407B (zh) | 一种智能数据搜索系统及方法 | |
CN101719167B (zh) | 一种可互动的影视搜索方法 | |
US20080140627A1 (en) | Method and apparatus for aggregating database runtime information and analyzing application performance | |
CN108664635B (zh) | 数据库统计信息的获取方法、装置、设备和存储介质 | |
CN111352950B (zh) | 数据库表等值连接的优化方法、装置、服务器及存储介质 | |
CN108460052B (zh) | 一种自动创建索引的方法、装置及数据库系统 | |
CN112988782A (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN113342843A (zh) | 大数据在线分析方法和系统 | |
CN104391923A (zh) | 一种查询数据集的方法及装置 | |
CN112286961B (zh) | Sql优化查询方法及装置 | |
CN108268612B (zh) | 一种基于olap预计算模型的预校验方法及预校验系统 | |
CN115237947A (zh) | Sql数据库的优化处理方法、装置、智能终端及介质 | |
CN117827881A (zh) | 一种基于历史信息的Spark SQL Shuffle任务数优化系统 | |
CN111046092B (zh) | 一种基于cpu-gpu异构体系结构的并行相似性连接方法 | |
CN110874366A (zh) | 数据处理、查询方法和装置 | |
US8832157B1 (en) | System, method, and computer-readable medium that facilitates efficient processing of distinct counts on several columns in a parallel processing system | |
CN110287114A (zh) | 一种数据库脚本性能测试的方法及装置 | |
CN116186041A (zh) | 数据湖索引创建方法、装置、电子设备及计算机存储介质 | |
CN112783758B (zh) | 测试案例库与特征库生成方法、设备及存储介质 | |
CN113111050B (zh) | 数据库对比方法及装置 | |
CN117290355B (zh) | 一种元数据地图构建系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |