本发明属于数据库索引,具体涉及创建数据库索引的方法。
背景技术:
1、针对目前市面上的关系型数据库(如oracle sqlserver mysql pg等),对其建立非聚集索引(或者叫二级索引、辅助索引),并且力争创建出来的索引是比较理想的,以便解决数据库可能由于数据量大而引起的性能问题,一个有效的好的索引非常重要,带来的收益可以高于多个cpu的叠加效果,以及多个内存叠加等方式带来的硬件效果,索引时经常出现的问题有:1、在创建了索引的情况下,没有使用该索引;2、虽然使用了相应索引,但是消耗仍然非常大,时间消耗仍然非常长。由此,需要创建一种有效并且高效的索引方式,以便提高数据库的响应性能。
技术实现思路
1、本发明的目的是提供创建数据库索引的方法,用以解决现有技术中存在的上述问题。
2、为了实现上述目的,本发明采用以下技术方案:
3、一种创建数据库索引的方法,包括以下步骤:
4、判断sql语句的操作类型是否需要建立索引:判断sql语句的操作类型,对操作类型含有查询、修改以及删除含义的sql语句建立索引;
5、识别sql语句的表连接类型;
6、识别表类型,所述表类型包括用户表和系统表,提取用户表的字段名;对所述系统表进行忽略;所述字段名包括多种类型的字段;所述字段包括:条件字段、分组排序字段、查询展示字段及修改设置字段;
7、根据预设的字段加入规则,确认需要加入到索引的字段;
8、根据所述表连接类型对应的预设的字段排序规则,对加入到索引的字段进行排序,生成索引。
9、进一步的,预设的字段加入规则包括:
10、获取通过条件字段筛选过滤之后的行数量,判断行数量是否大于预设阈值或行数量是否大于对应表总行数百分比的预设值,若是,则将sql语句里面的所有字段都添加到索引里;若否,将条件字段添加到索引。
11、进一步的,预设的字段加入规则包括:
12、获取字段数量以及索引长度,如果字段数量超过预设索引字段数量的限制,则依次按照条件字段、分组排序字段、查询展示字段和/或修改设置字段的顺序加入到索引。
13、进一步的,预设的字段加入规则包括:
14、去除存在超过预设长度的大字符字段;
15、去除存在超过预设修改频率的字段;
16、如果整个查询展示字段中的某个字段由于预设规则没有添加到索引,则去除对应的整个查询展示字段;
17、如果整个分组排序字段中的某个字段由于预设规则没有添加到索引,则去除对应的整个分组排序字段;
18、如果整个修改设置字段的某个字段由于预设规则没有添加到索引,则去除对应的整个修改设置字段。
19、进一步的,预设的字段加入规则包括:将预设的界定为选择性差的字段添加到索引。
20、进一步的,预设的字段加入规则包括:如字段类型只有分组排序字段以及查询展示字段,将所述分组排序字段以及查询展示字段都添加到索引。
21、进一步的,根据所述表连接类型对应的预设的字段排序规则,对加入到索引的字段从左到右进行排序,排序的方法包括:
22、若sql语句中不存在分组排序字段,则进行如下操作:
23、创建出来的索引其字段从左到右依次为:第一字段、第二字段和剩余字段,
24、所述第一字段包括等值条件字段中的全部或者部分字段和/或isnull条件字段中的全部或者部分字段,第一字段中的等值条件字段和isnull条件字段可以互相调换;
25、所述第二字段是条件字段中过滤效果最好的范围条件字段,过滤效果最好的范围条件字段是根据预设的过滤效果判断条件判断得到;
26、所述剩余字段是当前sql语句中除了第一字段和第二字段后剩下的字段,所述剩余字段的多个字段之间的顺序可以互相调换;
27、第一字段是等值条件字段部分字段时和/或isnull条件字段的部分字段时,记为a型第一字段;第一字段是等值条件字段全部字段时和/或isnull条件字段是全部字段时,记为b型第一字段;
28、设所述b型第一字段加上第二字段过滤得到的行数量为α,所述a型第一字段加上第二字段过滤得到的行数量为β,如果满足β-α<γ,所述γ为第一预设阈值,则第一字段选用a型第一字段或选择b型第一字段;如果不满足,则第一字段选择b型第一字段;
29、若sql语句存在分组排序字段,则进行如下操作:
30、获取sql语句中条件字段中的过滤效果优等字段,所述过滤效果优等字段是条件字段中满足预设过滤要求的范围条件字段;
31、当满足以下条件时:
32、所述分组排序字段的第一个字段与所述过滤效果优等字段中的某一字段相同;或
33、第一字段过滤出来的行数量与加上所有的范围条件字段之后过滤出来的行数量之间的差值小于第四预设阈值;或
34、将分组排序字段的第一个字段紧跟在所述第一字段之后进行查询,获取的行数量为c,将所述第二字段紧跟在所述第一字段之后进行查询,获取的行数量为d,该sql所有字段过滤后的行数量e,若(c-d)/e小于等于j,j为第五预设阈值;
35、则创建出来的索引字段从左到右依次为第一字段、分组排序字段和剩余字段;
36、若不满足,则创建出来的索引字段从左到右依次为第一字段、第二字段和剩余字段。
37、进一步的,根据所述表连接类型对应的预设的字段排序规则,所述表连接类型包括单表连接类型和多表连接类型;当表连接类型为多表连接类型时,还进行如下操作:
38、若sql语句存在分组排序字段,且分组排序字段全是针对多张表中的某一张表x的字段时;
39、获取每张表的本地条件字段过滤出来的行数量;
40、判断表x通过本地条件字段过滤出来的行数量与另一个相关联的表通过本地条件字段过滤出来的行数量的差值是否小于等于第六预设阈值,若是,则选择排序分组字段所在的表x作为入口表;所述入口表为多表连接查询时采用嵌套循环时的驱动表;
41、当表x通过本地条件字段过滤出来的行数量与另一个相关联的表通过本地条件字段过滤出来的行数量的差值大于所述第六预设阈值,则按照下列规则进行判断:
42、设分组排序字段所在的表通过本地条件字段过滤出来的行数量的值为m,另一个相关联的表通过相应的本地条件字段过滤出来的行数量的值为n,两表关联之后需要排序的行数量的值为g,
43、当(m-n)/g<h时,h为预设值,选择将分组排序字段所在的表作为入口表。
44、分组排序字段所在的表通过本地条件字段过滤出来的行数量的值减去另一个相关联的表通过本地条件字段过滤出来的行数量的值除以两表关联之后需要排序的行数量的值小于预设阈值,此时选择将分组排序字段所在的表作为入口表。
45、进一步的,寻找第二字段时,当该索引的左侧具有第一字段,需要将待判断的范围条件字段加上所述第一字段一起进行搜索过滤,以此判断范围条件字段的过滤性;若多个范围条件字段对应的搜索过滤后的行数量之间相差小于第二预设阈值,则根据预设的字段选择条件,选择一个字段作为第二字段。
46、进一步的,对于剩余字段确定,如果剩余字段是属于条件字段,那么应该将该条件字段加入到索引里面去,当所述条件字段对数据的过滤起不到作用,且其他sql语句对该字段进行着超过预设频率的修改时,则不用将所述条件字段加入到索引里面去。
47、有益效果:
48、1、上述索引方法优点是快速,只需要按照规则建立索引就行了,匹配规则之后,只会生成一个索引,不会生成大量的索引,对用户数据库的性能、磁盘空间等影响都非常小;已有的发明当sql语句的过滤条件的字段数量较多时,会产生大量的组合,理论上来讲由于组合太多,不一定能够真正的产生所有的组合,即使能够产生,消耗的时间也是非常大的,体验上也是很不好的优化索引创建:本发明通过对sql语句的操作类型、连接类型以及字段名进行细致的分析和判断,能够更准确地识别出需要建立索引的场合,从而优化索引的创建过程,避免不必要的索引创建,提高数据库的运行效率。
49、2、提高检索效率:本发明创建的非聚集索引(二级索引、辅助索引)能够更好地满足复杂的查询需求,提高数据的检索效率,减少i/o操作,节省时间和资源。
50、3、适应大规模数据:本发明的索引创建方法能够更好地应对大规模数据,通过优化索引结构,避免因数据量过大导致的数据库性能下降,提高数据库的稳定性和可靠性。
51、4、充分利用硬件资源:本发明的索引创建方法能够更好地利用多核cpu和大容量内存,通过优化数据库系统的资源利用率,进一步提升数据库的性能。
52、5、降低维护成本:本发明的索引创建方法能够减少无效的索引创建,降低数据库的维护成本,提高数据库的使用效益。
1.一种创建数据库索引的方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的创建数据库索引的方法,其特征在于,预设的字段加入规则包括:
3.根据权利要求1所述的创建数据库索引的方法,其特征在于,预设的字段加入规则包括:
4.根据权利要求1所述的创建数据库索引的方法,其特征在于,预设的字段加入规则包括:
5.根据权利要求1所述的创建数据库索引的方法,其特征在于,预设的字段加入规则包括:将预设的界定为选择性差的字段添加到索引。
6.根据权利要求1所述的创建数据库索引的方法,其特征在于,预设的字段加入规则包括:如字段类型只有分组排序字段以及查询展示字段,将所述分组排序字段以及查询展示字段都添加到索引。
7.根据权利要求1所述的创建数据库索引的方法,其特征在于,根据所述表连接类型对应的预设的字段排序规则,对加入到索引的字段从左到右进行排序,排序的方法包括:
8.根据权利要求7所述的创建数据库索引的方法,其特征在于,
9.根据权利要求7所述的创建数据库索引的方法,其特征在于,
10.根据权利要求7所述的创建数据库索引的方法,其特征在于,对于剩余字段确定,如果剩余字段是属于条件字段,那么应该将该条件字段加入到索引里面去,当所述条件字段对数据的过滤起不到作用,且其他sql语句对该字段进行着超过预设频率的修改时,则不用将所述条件字段加入到索引里面去。