一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

索引生成方法、装置、电子设备及可读存储介质与流程

2022-04-06 21:54:17 来源:中国专利 TAG:
1.本技术涉及计算机
技术领域
:,尤其涉及一种索引生成方法、装置、电子设备及可读存储介质。
背景技术
::2.随着计算机技术的快速发展,需要处理或需要存储的数据量越来越大,因此数据库中拥有巨大的数据量,故建立高效的索引来增加查询和修改的速度是必要的,索引是对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列的值的集合和相应的指向表中物理标识上述各值的数据页的逻辑指针清单。3.现有技术中,以关系型数据库管理系统mysql数据库为例,通过人工检查sql语句并进行分析,然后梳理出一个表应建的索引及索引组成字段,例如,在执行与索引相关的操作时,如新建索引、增加新列到已有索引、删除索引等操作,数据库管理员需要经过反复确认后才能建立与表相应的索引信息。4.但是,通过人工建立索引信息,过程繁琐,工作量大,效率低下,浪费时间和人力资源,不适合推广。技术实现要素:5.本技术提供一种索引生成方法、装置、电子设备及可读存储介质,可以提高建立索引信息的效率,节省时间,减少人力资源浪费。6.第一方面,本技术提供一种索引生成方法,所述方法包括:7.对预先存储的sql语句进行解析,并在解析过程中识别所述sql语句的类型;其中,所述sql语句用于对数据表中的字段进行查询;8.基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息;9.获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息。10.可选的,所述方法还包括:11.存储所述索引信息以及数据表的对应关系;12.响应于开发人员的查看操作,展示所述索引信息以及数据表的对应关系;13.根据开发人员对所述索引信息的变更操作,对所述索引信息进行变更,以在获取到查询人员输入的sql语句时,根据所述sql语句对应的变更后的索引信息查找对应的数据表进行查询操作。14.可选的,所述类型包括下述至少一项:选择语句类型、更新语句类型和删除语句类型;所述字段信息包括:查询字段信息、分组字段信息和排序字段信息;基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息,包括:15.若所述sql语句的类型为选择语句类型,则获取解析后所述sql语句中相应的数据表对应的至少一个表名、查询字段信息、分组字段信息和排序字段信息;16.若所述sql语句的类型为更新语句类型或删除语句类型,则获取解析后所述sql语句中相应的数据表对应的表名以及查询字段信息;17.其中,所述查询字段信息用于标识待查询的至少一个字段;所述分组字段信息用于标识表中待输出的需要进行分组的字段;所述排序字段信息用于标识表中需要进行排序的字段。18.可选的,获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息,包括:19.根据所述表名找到对应的数据表,并判断所述数据表是否存在对应的至少一个索引信息;20.若存在,则遍历所述至少一个索引信息,并比对所述索引信息中的字段信息与所述sql语句对应的字段信息是否完全相同,基于比对结果更新所述索引信息;21.若不存在,则为所述数据表新建一个索引信息,并基于所述sql语句对应的字段信息更新所述索引信息。22.可选的,基于比对结果更新所述索引信息,包括:23.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息完全相同,则将该索引信息对应的使用次数值加1,并保留该索引信息;24.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息都不完全相同,则利用所述sql语句对应的字段信息新增一个索引信息中的字段信息,并将新增后的索引信息对应的使用次数设置为1;25.相应的,所述方法还包括:26.响应于开发人员的获取操作,获取所述索引信息对应的使用次数,并确定当所述使用次数大于预设阈值时,向开发人员发送提示信息,用于向开发人员推荐使用所述使用次数对应的所述索引信息。27.可选的,所述数据表的数量为至少一个;根据所述表名找到对应的表,并判断所述数据表是否存在对应的至少一个索引信息,包括:28.根据所述表名找到对应的数据表,并判断所述数据表是否存在表连接信息:29.若是,则基于所述表连接信息确定与所述数据表具有关联关系的其它数据表,并判断所述数据表与所述其它数据表是否存在至少一个索引信息。30.可选的,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息,包括:31.若确定所述字段信息中包括排序字段信息,则获取所述字段信息中的升降序信息,并判断所述排序字段信息是否归属于同一个表;32.若是,则比对所述字段信息与所述索引信息中的字段信息以及所述字段信息与所述索引信息中对应的升降序信息,并基于比对结果更新所述索引信息;33.若否,则结束比对过程。34.第二方面,本技术提供一种索引生成装置,所述装置包括:35.解析模块,用于对预先存储的sql语句进行解析,并在解析过程中识别所述sql语句的类型;其中,所述sql语句用于对数据表中的字段进行查询;36.获取模块,用于基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息;37.处理模块,用于获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息。38.第三方面,本技术提供一种电子设备,包括:处理器,存储器以及计算机程序;其中,所述计算机程序被存储在所述存储器中,并且被配置为由所述处理器执行,所述计算机程序包括用于执行如第一方面任一项所述的索引生成方法的指令。39.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如第一方面任一项所述的索引生成方法。40.综上所述,本技术提供一种索引生成方法、装置、电子设备及可读存储介质,可以通过对预先存储的sql语句进行解析,并在解析过程中识别sql语句的类型;其中,sql语句用于对数据表中的字段进行查询;进一步的,基于类型获取解析后sql语句对应的数据表的表名以及待查询的字段信息;进一步,可以根据表名获取数据表对应的索引信息,比对字段信息与索引信息中的字段信息,并基于比对结果更新索引信息。这样,可以提高建立索引信息的效率,节省时间,减少人力资源浪费。附图说明41.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。42.图1为本技术实施例提供的一种应用场景示意图;43.图2为本技术实施例提供的一种索引生成方法的流程示意图;44.图3为本技术实施例提供的一种读取mapper文件的原理示意图;45.图4为本技术实施例提供的一种处理mapper文件的流程示意图;46.图5为本技术实施例提供的一种sql语句解析的流程示意图;47.图6为本技术实施例提供的一种基于选择语句类型进行比对字段信息与索引信息中的字段信息的流程示意图;48.图7为本技术实施例提供的一种基于删除或更新语句类型进行比对字段信息与索引信息中的字段信息的流程示意图;49.图8为本技术实施例提供的一种索引生成装置的结构示意图;50.图9为本技术实施例提供的一种电子设备的结构示意图。51.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。具体实施方式52.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。53.为了便于清楚描述本技术实施例的技术方案,在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一设备和第二设备仅仅是为了区分不同的设备,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。54.需要说明的是,本技术中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本技术中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。55.本技术中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。56.下面对相关术语进行解释:57.mybatis:指的是apache软件基金会的一个开源项目,提供一个基于java的持久层框架。58.pojo(plainordinaryjavaobject):指的是一种简单的java对象。59.数据访问层:指的是用于mybatis中访问数据库的层结构。60.mapper文件:指的是记录在数据库表字段与相应的pojo类的映射关系,dao类(dataaccessobject)中方法与sql之间的映射关系的文件,用于保存mybatis中访问数据库的sql语句,其文件格式符合xml文件规范。其中,dao类指的是数据访问对象是一个面向对象的数据库接口。61.sql(structuredquerylanguage):指的是一种结构化查询语言,用于存取数据以及查询、更新和管理关系数据库系统的语言。62.索引:指的是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存版储结构。它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。63.候选索引:指的是一种可能需要在某个表上建立的索引,不是用于最终投产的索引。64.为了更好的理解本技术提供的方法,下面先对现有技术进行解释,以关系型数据库管理系统mysql数据库为例,通过人工检查sql语句并进行分析,示例性的,有四个sql语句,sql语句1为:selecta.col1,a.col2,b.col1fromtable1ajointable2bona.col1=b.col2anda.col2=b.col3wherea.col1=1anda.col2=3orderbya.col1,a.col2;sql语句2为:selecta.col1,a.col2,b.col1fromtable1ajointable2bona.col1=b.col2anda.col2=b.col3wherea.col1=1anda.col2=8andb.col4=5orderbya.col1desc,a.col2desc;sql语句3为:selecta.col2,count(*)cntfromtable1awherea.col2》100groupbya.col2orderbya.col2;sql语句4为:selecta.col2,a.col3,a.col4,a.col5fromtable1awherea.col2》100anda.col1《100。65.其中,以sql语句3为例,对sql语句中内容进行解释,select子句的内容就是a.col2,count(*)cnt,其中col2为字段名,限定为别名为a的表的字段;from子句的内容就是table1a,其中table1为表的名字,a为别名,在指定别名之后,a即代表table1,a.col2等价于table1表的字段col2,count(*)是一个统计函数,cnt是字段别名;where子句的内容是a.col2》100,为查询过滤条件;orderby子句的内容是a.col2,groupby子句的内容是a.col2。该sql语句3语句表达的意思是选择表名为table1a表中的命名为col2的一列,统计该列中大于100的信息,该列的分组为表a中col2列,按照升序进行排序。66.需要说明的是,desc表示降序排序,不可以省略。67.在上面的四个sql示例中,实际应用中,梳理出一个表应建的索引及索引组成字段,开发人员针对四个语句在table表理出一个表应建的索引及索引组成字段,即:68.createindexidx1ontable1(col1asc,col2asc);69.createindexidx2ontable1(col1desc,col2desc);70.createindexidx3ontable1(col2);71.createindexidx4ontable1(col2,col1)。72.但是,在上面四个sql语句中,在col1和col2两个字段上建立了三个索引,造成了索引冗余,导致数据库资源浪费,而且,开发人员在建立索引时的效率较低,另外,通过人工建立索引信息,工作量大,还易遗漏,易出错,例如,对于一个索引,其组成字段是有顺序的,但在sql语句中的where子句后的字段书写顺序与索引字段的顺序不管是否一致,均可以匹配上这个索引。因此在识别表的索引时,若访问同一张表的不同sql语句,其where子句后的字段集合相同,但只是书写顺序不同,则也应识别为一个索引,但在人工识别时,有可能识别成多个索引,造成出错,而且人工输入候选索引信息时,可能存在手工输入错误、遗漏差异信息等情况,导致最终索引信息产生错误。73.因此,可以先利用设备生成表对应的候选索引或者最终索引,可以提高建立索引信息的效率,节省时间,减少人力资源浪费,减少出错。74.下面结合附图对本技术实施例进行介绍。图1为本技术实施例提供的一种应用场景示意图,本技术提供的一种索引生成方法可以应用于如图1所示的应用场景中。该应用场景包括:开发人员101,终端设备102和服务器103;其中,服务器103包括候选索引生成器104和数据库。具体的,服务器103中的候选索引生成器104可以自动读取该候选索引生成器104工具软件所在目录的配置文件,从中可以读取到mapper文件的存放路径,然后依次读取该存放路径指定目录下的mapper文件,该mapper文件用于存放sql语句,进一步的,候选索引生成器104依次对mapper文件下的sql语句进行解析处理,得到表对应的候选索引,并将该候选索引存储至服务器103的数据库中,该候选索引用于供开发人员101在实际建立索引时进行参考,提升工作效率,减少由于漏建索引导致的性能问题。75.例如,开发人员101可以通过操作终端设备102,向服务器103发送查看指令,进一步的,服务器103接收该查看指令,对候选索引信息以及其对应表的相关信息反映给终端设备102进行显示,进一步的,开发人员101可以参考候选索引信息以及其对应表的相关信息对索引信息进行变更等相关处理。76.基于上述四个sql语句,若利用本技术提供的方法,候选索引生成器104可以识别到col1和col2两个字段被sql语句1、sql语句2和sql语句4所利用,则上述四个sql语句可以建立的索引为createindexidx1ontable1(col1,col2)reverse;createindexidx3ontable1(col2)。其中,reverse表示数据库支持反向扫描的情况。77.若数据库不支持反向扫描的情况下,则上述四个sql语句可以建立的索引为:createindexidx1ontable1(col1,col2);createindexidx2ontable1(col1desc,col2desc);createindexidx3ontable1(col2)。78.其中,终端设备也可以被称为终端(terminal)、用户设备(userequipment,ue)、移动台(mobilestation,ms)、移动终端(mobileterminal,mt)等。终端设备可以是手机(mobilephone)、智能电视、穿戴式设备、智能安防设备、智能网关、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtualreality,vr)终端设备、增强现实(augmentedreality,ar)终端设备、工业控制(industrialcontrol)中的无线终端、无人驾驶(self-driving)中的无线终端、智能电网(smartgrid)中的无线终端、运输安全(transportationsafety)中的无线终端、智慧城市(smartcity)中的无线终端、智慧家庭(smarthome)中的无线终端等等。79.需要说明的是,一种可能的实现方式中,服务器103可以对mapper文件下的sql语句进行解析处理,得到表对应的最终索引,不需要开发人员再次对索引信息进行变更便可以进行投产使用,本技术实施例对此不作具体限定。80.基于现有技术通过人工建立索引信息,过程繁琐,工作量大,效率低下,浪费时间和人力资源,不适合推广等问题,本技术提供一种索引生成方法,可以在投产前通过依次扫描指定目录及子目录下所有的mapper文件中的sql语句,进一步的,对每一个sql语句中的where子句、groupby子句和orderby子句进行解析,获得where子句后的查询条件、表连接字段、orderby子句后的排序字段等信息,给出每一个表对应的候选索引信息,并暂存于内存中,供开发人员实际建立索引时参考,可以减少漏建索引导致的性能问题,且提高开发人员建立索引的工作效率。81.需要说明的是,sql语句的类型不同,解析获得每个子句所使用的字段列表不同,其中,update(更新)和delete(删除)类型的语句中只需解析where子句后的内容,select(选择)类型的语句需要解析where子句、groupby子句和orderby子句。82.下面以具体地实施例对本技术的技术方案进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。83.图2为本技术实施例提供的一种索引生成方法的流程示意图;如图2所示,本实施例的方法,可以包括:84.s201、对预先存储的sql语句进行解析,并在解析过程中识别所述sql语句的类型;其中,所述sql语句用于对数据表中的字段进行查询。85.本技术实施例中,sql语句的类型包括下述至少一项:选择语句类型、增加语句类型、更新语句类型和删除语句类型;其中,选择语句类型即select语句,用于从数据库表中获取数据;更新语句类型即update语句,用于更新数据库表中的数据;删除语句类型即delete语句,用于从数据库表中删除数据;增加语句类型即insert语句,用于向数据库表中插入数据。86.需要说明的是,本技术实施例若在解析过程中识别sql语句的类型为insert语句,则不对该sql语句进行解析处理,而是直接使用表的主键索引信息作为该类型的索引信息。87.示例性的,在图1的应用场景下,候选索引生成器104可以对预先存储的sql语句进行解析,并在解析过程中识别sql语句的类型,例如,识别sql语句的类型为select语句,则对sql语句中的where子句、groupby子句和orderby子句进行解析。88.需要说明的是,sql语句类型为选择语句类型时,sql语句中通常存在where子句,但不一定存在groupby子句和orderby子句,本技术实施例对于存在哪些子句,就对哪些子句进行解析。89.s202、基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息。90.本技术实施例中,字段信息包括:查询字段信息、分组字段信息和排序字段信息;该查询字段信息为where子句后的字段信息,包括查询条件字段名集合和其它表进行连接的字段名集合(即字段信息);其中,其它表进行连接的字段名集合只有选择语句类型中存在,该查询字段信息用于标识待查询的至少一个字段;该分组字段信息为groupby子句后的字段信息,用于标识表中待输出的需要进行分组的字段;所述排序字段信息为orderby子句后的字段信息,用于标识表中需要进行排序的字段。例如,以sql语句3为例,查询字段信息为a.col2》100中的col2,分组字段信息为a.col2中的col2,排序字段信息为a.col2中的col2。91.示例性的,在图1的应用场景下,候选索引生成器104可以基于sql语句的类型获取解析后该sql语句对应的数据表的表名以及待查询的字段信息,例如,以sql语句1为例,候选索引生成器104可以判别该sql语句的类型为选择语句类型,进一步,可以获取该sql语句对应的数据表的表名为table1a和table2b,查询字段信息为a.col1=1anda.col2=3中的col1和col2,排序字段信息为a.col1,a.col2中的col1和col2。92.s203、获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息。93.本技术实施例中,索引信息指的是候选索引,是未在投产前基于sql语句生成的一种存版储结构,其命名规则为:idx_表名_序号,其序号从1开始。例如表test的第一个候选索引名为idx_test_1,包括字段序号,字段名,字段升降序信息。例如,sql语句2对应的索引信息为createindexidx2ontable1(col1desc,col2desc)。94.示例性的,在图1的应用场景下,以sql语句2为例,候选索引生成器104可以获取表名为table1a和table2b,进一步的,根据上述表名找对其对应的索引信息,比对col1和col2与该索引信息中的字段信息,并基于比对结果更新索引信息,例如,col1和col2与该索引信息中的字段信息完全一致,则保留该索引信息中的字段信息,若col1和col2与该索引信息中的字段信息完全不一致,则利用col1和col2新建一个索引信息中的字段信息,保存至内存中。95.需要说明的是,根据表名找对其对应的索引信息的数量可能不止一个,需要将字段信息与不止一个索引信息中的字段信息一一进行比对,本技术实施例对索引信息的数量不做具体限定,其视具体情况而定。96.因此,本技术提供的索引生成方法,可以通过设备自身建立索引信息,为开发人员在实际建立索引时进行参考,提升工作效率,进一步,可以提高建立索引信息的效率,还可以节省时间,减少人力资源浪费,而且开发人员在实际建立索引时,还可以直接利用设备自身建立索引信息,方便快捷。97.可选的,对预先存储的sql语句进行解析,包括:98.响应于用户的触发操作,读取目录配置文件中的文件存放路径,并依次读取所述文件存放路径下的多个文件;99.依次对各个文件中的sql语句进行解析。100.示例性的,图3为本技术实施例提供的一种读取mapper文件的原理示意图,如图3所示,以执行主体为候选索引生成器工具为例,候选索引生成器工具首先读取mapper文件存放路径和建议索引信息文件存放路径,然后依次读取mapper文件,进行解析处理,进一步,候选索引生成器工具给出建议索引文件,该索引文件用于存储候选索引以及数据表的对应关系;具体的,图4为本技术实施例提供的一种处理mapper文件的流程示意图,如图4所示,候选索引生成器工具可以响应于用户的触发操作,然后逐一读取mapper文件存放路径下的所有文件并进行判断每一mapper文件是否处理完成,若是,则将候选索引信息输出到文件,若否,则对mapper文件进行处理,即对mapper文件中的sql语句进行解析处理。101.需要说明的是,本技术实施例对存储sql语句的文件不做具体限定,可以为本技术实施例中提到的mapper文件,也可以是其他文件,本技术实施例对此不做具体限定。102.因此,本技术可以读取目录配置文件中的所有文件,不会有遗漏,能够最大程度降低由于漏建索引导致的性能问题。103.可选的,所述方法还包括:104.存储所述索引信息以及数据表的对应关系;105.响应于开发人员的查看操作,展示所述索引信息以及数据表的对应关系;106.根据开发人员对所述索引信息的变更操作,对所述索引信息进行变更,以在获取到查询人员输入的sql语句时,根据所述sql语句对应的变更后的索引信息查找对应的数据表进行查询操作。107.优选的,可以将索引信息以及数据表的对应关系暂存于内存中指定目录下的createindex.sql文件中。108.示例性的,在图1的应用场景下,开发人员101可以通过操作终端设备102进行查看操作,进一步的,终端设备102将该查看操作的指令发送给候选索引生成器104,相应的,候选索引生成器104可以响应于开发人员101的查看操作,向终端设备102反馈索引信息以及数据表的对应关系,进一步的,终端设备102展示索引信息以及数据表的对应关系,进一步的,开发人员101可以对这些索引信息进行变更操作,类似的,开发人员101可以通过操作终端设备102进行变更操作,然后,候选索引生成器104可以根据开发人员101对索引信息的变更操作,对索引信息进行变更,以在获取到查询人员101输入的sql语句时,根据sql语句对应的变更后的索引信息查找对应的数据表进行查询操作。109.因此,本技术可以提前扫描所有sql语句生成对应的索引信息,为开发人员变更索引信息提供帮助,提升开发人员的处理速度和生成索引信息正确性,降低开发人员的工作强度,提升了工作效率。110.需要说明的是,前期对文件中的sql语句进行梳理,并获得最终需给表建立的索引及其组成字段信息,其工作量是很大的,对于一个表数量较多的大型的项目,其工作量尤其大。而且按照一般项目的实施规律,在系统投产之前,人力资源不如开发阶段充沛,此时完成这项工作的工作人员的工作强度会很大,也有可能由于人力和时间限制,可能只梳理部分文件中的sql语句,从而可能漏掉部分表上一些重要的索引,从而导致在投产运行后发生性能问题。而本技术可以通过自动扫描指定目录及子目录下的文件中的sql语句,就能输出所有表的候选索引信息,供开发人员给表建立索引时参考。111.可选的,所述类型包括下述至少一项:选择语句类型、更新语句类型和删除语句类型;所述字段信息包括:查询字段信息、分组字段信息和排序字段信息;基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息,包括:112.若所述sql语句的类型为选择语句类型,则获取解析后所述sql语句中相应的数据表对应的至少一个表名、查询字段信息、分组字段信息和排序字段信息;113.若所述sql语句的类型为更新语句类型或删除语句类型,则获取解析后所述sql语句中相应的数据表对应的表名以及查询字段信息;114.其中,所述查询字段信息用于标识待查询的至少一个字段;所述分组字段信息用于标识表中待输出的需要进行分组的字段;所述排序字段信息用于标识表中需要进行排序的字段。115.示例性的,在图1的应用场景下,候选索引生成器104针对不同sql语句的类型,其解析的字段信息不同,例如,当候选索引生成器104识别sql语句的类型为选择语句类型时,会解析出该sql语句中相应的数据表对应的至少一个表名、查询字段信息、分组字段信息和排序字段信息;当候选索引生成器104识别sql语句的类型为更新语句类型或删除语句类型时,会解析出该sql语句中相应的数据表对应的表名以及查询字段信息。116.需要说明的是,在解析sql语句时,只有选择语句类型、更新语句类型和删除语句类型的sql语句才会被处理,增加语句类型不会被处理。因为,增加语句类型对应的sql语句没有where子句、orderby子句、groupby子句,若sql语句为增加语句类型,则不继续解析这个sql语句,会进行处理下一个sql语句。117.因此,本技术实施例针对不同的sql语句有不同的处理过程,提高处理的灵活性和处理速率。118.可选的,依次对各个文件中的sql语句进行解析,包括:119.判断所述文件中的sql语句是否解析完成;120.若否,则将所述sql语句转换成统一格式,并基于sql语言的语法和关键字,解析所述转换成统一格式的sql语句;121.若是,则读取所述第一文件存放路径下的其他文件。122.示例性的,在图1的应用场景下,候选索引生成器104可以判断一个mapper文件中的sql语句是否解析完成,若没有,则对其中的sql语句进行解析,以一个查询sql语言为例,该sql语言为selectuser_namefromuser_tablewhereuser_id=#{userid}orderbyusername,具体的,可以先将上述sql语言转换成大写格式:selectuser_namefromuser_tablewhereuser_id=#{userid}orderbyusername,这样,便于统一处理,进一步的,可以获取语句类型,即第一个单词,为select,判断其为选择语句类型,进一步的,查找from关键字,获取表名(或表名列表),即user_table,查找where关键字,获取查询字段信息,即user_id,查找orderby关键字,获取排序字段信息,即username;若解析完成,则会读取其他mapper文件中的sql语句,并对其中的sql语句进行解析。123.可以理解的是,若文件是一个符合mybatis的数据访问层规范的xml文件,则可以按xml文件进行解析,本技术实施例对解析的具体过程不做限定。124.具体的,图5为本技术实施例提供的一种sql语句解析的流程示意图,如图5所示,可以先判断一个文件中的sql语句是否处理完成,若是,则结束该文件中的sql语句处理,若否,则读取一条sql语句,判断该sql语句的类型,若为select语句类型、update语句类型和delete语句类型,则进行相应语句类型的解析处理,若为insert语句类型,则读取下一条sql语句进行分析处理。125.需要说明的是,在解析完所有文件后,对暂存于内存中的表的索引信息进行去重,得到一个表的最终建议的索引信息,并保存到指定的文件中。126.因此,本技术实施例提供的方法可以在投产前通过扫描所有文件中的所用sql语句并对所有sql语句进行分析处理,减少信息遗漏,保证信息完整性。127.可选的,获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息,包括:128.根据所述表名找到对应的数据表,并判断所述数据表是否存在对应的至少一个索引信息;129.若存在,则遍历所述至少一个索引信息,并比对所述索引信息中的字段信息与所述sql语句对应的字段信息是否完全相同,基于比对结果更新所述索引信息;130.若不存在,则为所述数据表新建一个索引信息,并基于所述sql语句对应的字段信息更新所述索引信息。131.示例性的,在图1的应用场景下,候选索引生成器104可以根据表名找到对应的数据表,并判断数据表是否存在对应的至少一个索引信息;例如,若数据表存在索引信息a、索引信息b和索引信息c共三个索引信息,则候选索引生成器104基于sql语句对应的字段信息遍历索引信息a、索引信息b和索引信息c中的字段信息,并比对每一索引信息中的字段信息与sql语句对应的字段信息是否完全相同,并基于比对结果更新索引信息a、索引信息b和索引信息c这三个索引信息;若数据表不存在索引信息,则候选索引生成器104利用sql语句对应的字段信息为数据表新建一个索引信息。132.因此,本技术可以基于sql语句对应的字段信息对索引信息进行更新,使得每一sql语句中的表都有对应的索引信息,进一步,提高索引信息的涵盖率。133.可选的,基于比对结果更新所述索引信息,包括:134.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息完全相同,则将该索引信息对应的使用次数值加1,并保留该索引信息;135.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息都不完全相同,则利用所述sql语句对应的字段信息新增一个索引信息中的字段信息,并将新增后的索引信息对应的使用次数设置为1;136.相应的,所述方法还包括:137.响应于开发人员的获取操作,获取所述索引信息对应的使用次数,并确定当所述使用次数大于预设阈值时,向开发人员发送提示信息,用于向开发人员推荐使用所述使用次数对应的所述索引信息。138.本技术实施例中,预设阈值可以指的是设定的用于判定索引信息被sql语句使用频率较多的次数,例如,预设阈值可以为5次,提示信息可以指的是系统向开发人员使用的终端设备发送的消息提示信息,例如,该提示信息可以为“索引信息1被sql语句使用6次,对应的sql语句有sql1语句、sql2语句、sql3语句、sql4语句、sql5语句和sql6语句,建议使用”,需要说明的是,本技术实施例对预设阈值的具体数值和提示信息的具体内容不做限定,以上仅是实例说明。139.例如,如果索引信息createindexidx3ontable1(col2)的使用频率低,其使用次数小于预设阈值,在实际建立时不会被推荐,就有可能被舍弃,则上述四个sql示例中,在支持双向扫描的数据库的情况下,可能最终就建立一个索引:createindexidx1ontable1(col1,col2)reverse;在不支持双向扫描的数据库的情况下,可能建立如下的索引:createindexidx1ontable1(col1,col2);createindexidx2ontable1(col1desc,col2desc)。140.示例性的,在图1的应用场景下,候选索引生成器104可以根据解析得到的字段信息,遍历该数据表对应的任意一个索引信息中的字段信息,查看是否存在相同的字段名集合,如果存在,则给这个索引信息的usecnt值加1,并保留该索引信息,继续下一步处理;如不存在,则给该数据表增加一个索引信息,把这些字段信息作为索引信息的字段,并且标识该索引信息的isseq值为0,usecnt的值为1;其中,isseq用于标识索引信息的组成字段是否已经固定了顺序,索引字段是否指定了升降序,当取值为0时,表示标识索引字段没有固定顺序且字段未指定升降序,当取值为1时,表示标识索引字段有固定顺序,并且制定了升降序;usecnt表示使用这个索引信息的sql语句数。141.进一步的,开发人员101可以通过操作终端设备102进行获取操作,终端设备102将该获取操作的指令发送给候选索引生成器104,相应的,候选索引生成器104可以响应于开发人员101的获取操作,进一步的,获取索引信息对应的使用次数,并确定当使用次数大于预设阈值时,向开发人员101使用的终端设备102发送的消息提示信息,该提示信息可以为“索引信息1被sql语句使用6次,对应的sql语句有sql1语句、sql2语句、sql3语句、sql4语句、sql5语句和sql6语句,建议使用”。142.需要说明的是,本技术实施例在响应于开发人员101的查看操作,展示索引信息以及数据表的对应关系时,可以一并将索引信息对应的使用次数展示出来,供开发人员101参考。143.因此,本技术可以基于比对结果对索引信息进行更新,提高灵活性和识别索引的有效性,还可以获取索引信息被sql语句使用的次数供开发人员参考,降低开发人员工作强度,提升便利性和工作效率。144.可选的,所述数据表的数量为至少一个;根据所述表名找到对应的表,并判断所述数据表是否存在对应的至少一个索引信息,包括:145.根据所述表名找到对应的数据表,并判断所述数据表是否存在表连接信息:146.若是,则基于所述表连接信息确定与所述数据表具有关联关系的其它数据表,并判断所述数据表与所述其它数据表是否存在至少一个索引信息。147.示例性的,在图1的应用场景下,若候选索引生成器104识别到sql语句中有两个表有表连接的情况,则会对两个表连接的条件进行解析,并为这两个表分别增加一个索引信息。148.需要说明的是,只有选择语句类型的sql语句才会存在表连接信息,其他类型的sql语句不存在表连接信息。149.因此,本技术实施例还可以解决表连接情况,提高处理的灵活性。150.可选的,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息,包括:151.若确定所述字段信息中包括排序字段信息,则获取所述字段信息中的升降序信息,并判断所述排序字段信息是否归属于同一个表;152.若是,则比对所述字段信息与所述索引信息中的字段信息以及所述字段信息与所述索引信息中对应的升降序信息,并基于比对结果更新所述索引信息;153.若否,则结束比对过程。154.示例性的,在图1的应用场景下,候选索引生成器104可以先确定字段信息中是否包括排序字段信息,若是,则可以进行如下操作:根据解析得到where子句后的查询字段信息,得到该表的查询条件字段名集合和其它表进行连接的字段名集合,进一步的,根据解析得到的查询条件字段名集合,遍历该表的索引信息的字段信息,查看是否存在相同的字段信息,如存在,则给这个候选索引的usecnt值加1,并继续下一步处理;如不存在,则给该表增加一个索引信息,把这些查询条件字段作为候选索引的字段,并且标识该索引的isseq值为0,usecnt的值为1;相应的,利用其它表进行连接的字段名集合进行与上述类似的比对过程,在此不再赘述。155.进一步的,获取解析orderby子句后的排序字段信息和升降序信息,基于排序字段信息对应的别名判断是否是归属于同一个表的字段,如不是,则结束sql语句的处理,如是,则遍历该表的索引信息的字段信息,查看是否存在相同的字段名集合。如存在,判断索引信息对应的isseq值,若为0,标识该索引信息的isseq值为1,并给该索引信息的usecnt值加1,并删除原索引信息,以orderby子句后的字段信息及升降序信息作为该索引信息的字段信息和升降序信息。若isseq的值为1,则判断该索引信息的字段信息和升降序顺序是否与orderby子句后的字段信息和升降序信息是否一致,如一致,则给索引的usecnt加1,然后结束本sql语句的解析处理,如不一致,则给该表增加一个索引信息,把这些排序字段作为索引信息的字段信息,并且标识该索引信息的isseq值为1,usecnt的值为1;如不存在相同的字段名集合,则给该表增加一个索引信息,把排序字段作为候选索引的字段,并且标识该索引的isseq值为1,usecnt的值为1。156.可以理解的是,通过统计usecnt的值,便可以知道某个索引信息被sql语句使用的次数,便于开发人员查询。157.因此,本技术可以通过比对字段信息与索引信息中的字段信息,若完全相同,则保留索引信息中的字段信息,若完全不相同,则可以基于对应的字段信息中的一种或多种新增索引信息,保证信息的覆盖性,使得最终可生成的索引信息具有完整性,通过确定字段信息中是否包括排序字段信息,进行字段信息的比对,使得最终索引信息具有顺序性,即代表索引信息对应的表中字段具有顺序性,则表示输出结果也可以具有顺序性,节省输出时间,提升效率。158.结合上述实施例,图6为本技术实施例提供的一种基于选择语句类型进行比对字段信息与索引信息中的字段信息的流程示意图;如图6所示,以解析选择语句类型的sql语句,执行主体为候选索引生成器为例,该方法的执行步骤为:159.步骤a:候选索引生成器可以获取语句中的表名列表,并根据表名找到对应的表,并判断表是否存在表连接的情况;若存在,则为多个表分别新增一个候选索引信息(也可以理解为索引信息);若不存在,则根据表名从暂存在内存中的候选索引信息中获取该表的候选索引信息,如获取不到该表的候选索引信息,则新建一个该表的候选索引信息,执行步骤b。160.步骤b:候选索引生成器可以获取解析语句中where子句中字段信息,得到一个表的where子句后所有作为查询条件的字段信息;基于查询条件的字段信息判断该表候选索引信息中是否存在相同字段集合的候选索引;若不存在,给该表增加一条候选索引信息,执行步骤c;若存在,则直接执行步骤c。161.步骤c:候选索引生成器可以获取该表where子句中作为表连接的字段信息;基于表连接的字段信息判断该表候选索引信息中是否存在相同字段集合的候选索引;若不存在,给该表增加一条候选索引信息,执行步骤d;若存在,则直接执行步骤d。162.步骤d:候选索引生成器可以获取orderby子句后的字段列表信息,并判断字段是否归属于一个表;若是,则继续执行步骤e;若否,结束本sql语句的解析处理,并保留上述生成的候选索引。163.步骤e:候选索引生成器可以判断该表候选索引信息中是否存在相同字段集合的候选索引和该候选索引字段是否有确定顺序;若是,则继续判断该候选索引的字段顺序与升降序与新建的候选索引的字段顺序和升降序是否一致,并执行步骤f;若否,则删除原候选索引,执行步骤g。164.步骤f:若判断一致,则结束本sql语句的解析处理,并保留上述生成的候选索引;若判断不一致,则执行步骤g。165.步骤g:候选索引生成器可以给该表增加一个候选索引且索引字段有确切的顺序和升降序,保存上述生成的候选索引信息。166.需要说明的是,若字段信息中存在分组字段信息,也需要执行上述类似步骤b的执行过程,在此不在赘述。167.图7为本技术实施例提供的一种基于删除或更新语句类型进行比对字段信息与索引信息中的字段信息的流程示意图;如图7所示,以解析更新或删除语句类型的sql语句,执行主体为候选索引生成器为例,该方法的执行步骤为:168.步骤a:候选索引生成器可以获取语句中的表名列表,并根据表名从暂存在内存中的候选索引信息中获取该表的候选索引信息,如不存在该表的候选索引信息,则新建一个该表的候选索引信息,执行步骤b。169.步骤b:候选索引生成器可以解析语句中where子句中字段信息,得到一个表的where子句后所有作为查询条件的字段信息,进一步的,可以判断该表候选索引信息中是否存在相同字段集合的候选索引,若存在,则保留原候选索引信息,若不存在,则给该表增加一条候选索引信息并保存。170.需要说明的是,上述图6和图7的两个实施例中,若候选索引生成器在解析sql语句时,只要获取到任意一个或多个字段信息,就需要基于获取到的字段信息遍历该表对应的至少一个索引信息的字段信息,查看是否存在相同的字段信息。171.在前述实施例中,对本技术实施例提供的索引生成方法进行了介绍,而为了实现上述本技术实施例提供的方法中的各功能,作为执行主体的电子设备可以包括硬件结构和/或软件模块,以硬件结构、软件模块、或硬件结构加软件模块的形式来实现上述各功能。上述各功能中的某个功能以硬件结构、软件模块、还是硬件结构加软件模块的方式来执行,取决于技术方案的特定应用和设计约束条件。172.例如,图8为本技术实施例提供的一种索引生成装置的结构示意图,如图8所示,该装置包括:解析模块810,获取模块820和处理模块830;其中,解析模块810,用于对预先存储的sql语句进行解析,并在解析过程中识别所述sql语句的类型;其中,所述sql语句用于对数据表中的字段进行查询;173.获取模块820,用于基于所述类型获取解析后所述sql语句对应的数据表的表名以及待查询的字段信息;174.处理模块830,用于获取所述表名对应的索引信息,比对所述字段信息与所述索引信息中的字段信息,并基于比对结果更新所述索引信息。175.可选的,所述装置还包括变更模块,所述变更模块,用于:176.存储所述索引信息以及数据表的对应关系;177.响应于开发人员的查看操作,展示所述索引信息以及数据表的对应关系;178.根据开发人员对所述索引信息的变更操作,对所述索引信息进行变更,以在获取到查询人员输入的sql语句时,根据所述sql语句对应的变更后的索引信息查找对应的数据表进行查询操作。179.可选的,所述类型包括下述至少一项:选择语句类型、更新语句类型和删除语句类型;所述字段信息包括:查询字段信息、分组字段信息和排序字段信息;获取模块820,具体用于:180.若所述sql语句的类型为选择语句类型,则获取解析后所述sql语句中相应的数据表对应的至少一个表名、查询字段信息、分组字段信息和排序字段信息;181.若所述sql语句的类型为更新语句类型或删除语句类型,则获取解析后所述sql语句中相应的数据表对应的表名以及查询字段信息;182.其中,所述查询字段信息用于标识待查询的至少一个字段;所述分组字段信息用于标识表中待输出的需要进行分组的字段;所述排序字段信息用于标识表中需要进行排序的字段。183.可选的,处理模块830包括判断单元,比对单元和新建单元;184.具体的,所述判断单元,用于根据所述表名找到对应的数据表,并判断所述数据表是否存在对应的至少一个索引信息;185.所述比对单元,用于当所述数据表存在对应的至少一个索引信息时,遍历所述至少一个索引信息,并比对所述索引信息中的字段信息与所述sql语句对应的字段信息是否完全相同,基于比对结果更新所述索引信息;186.所述新建单元,用于当所述数据表不存在对应的至少一个索引信息时,为所述数据表新建一个索引信息,并基于所述sql语句对应的字段信息更新所述索引信息。187.可选的,所述比对单元,具体用于:188.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息完全相同,则将该索引信息对应的使用次数值加1,并保留该索引信息;189.若所述sql语句对应的字段信息与所述数据表对应的任意一个索引信息中的字段信息都不完全相同,则利用所述sql语句对应的字段信息新增一个索引信息中的字段信息,并将新增后的索引信息对应的使用次数设置为1;190.相应的,所述装置还包括推荐模块,所述推荐模块,用于:191.响应于开发人员的获取操作,获取所述索引信息对应的使用次数,并确定当所述使用次数大于预设阈值时,向开发人员发送提示信息,用于向开发人员推荐使用所述使用次数对应的所述索引信息。192.可选的,所述数据表的数量为至少一个;所述判断单元,具体用于:193.根据所述表名找到对应的数据表,并判断所述数据表是否存在表连接信息:194.若是,则基于所述表连接信息确定与所述数据表具有关联关系的其它数据表,并判断所述数据表与所述其它数据表是否存在至少一个索引信息。195.可选的,所述处理模块830,用于:196.若确定所述字段信息中包括排序字段信息,则获取所述字段信息中的升降序信息,并判断所述排序字段信息是否归属于同一个表;197.若是,则比对所述字段信息与所述索引信息中的字段信息以及所述字段信息与所述索引信息中对应的升降序信息,并基于比对结果更新所述索引信息;198.若否,则结束比对过程。199.本技术实施例提供的索引生成装置的具体实现原理和效果可以参见上述实施例对应的相关描述和效果,此处不做过多赘述。200.本技术实施例还提供了一种电子设备的结构示意图,图9为本技术实施例提供的一种电子设备的结构示意图,如图9所示,该电子设备可以包括:处理器902以及与所述处理器通信连接的存储器901;该存储器901存储计算机程序;该处理器902执行该存储器901存储的计算机程序,使得该处理器902执行上述任一实施例所述的方法。201.其中,存储器901和处理器902可以通过总线903连接。202.本技术实施例还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序执行指令,计算机执行指令被处理器执行时用于实现如本技术前述任一实施例中的所述的方法。203.本技术实施例还提供了一种运行指令的芯片,该芯片用于执行如本技术前述任一实施例中由电子设备所执行的前述任一实施例中所述的方法。204.本技术实施例还提供了一种计算机程序产品,该程序产品包括计算机程序,该计算机程序被处理器执行时可实现如本技术前述任一实施例中由电子设备所执行的前述任一实施例中所述的方法。205.在本技术所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。206.作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案。207.另外,在本技术各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。208.上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器执行本技术各个实施例所述方法的部分步骤。209.应理解,上述处理器可以是中央处理单元(centralprocessingunit,简称cpu),还可以是其它通用处理器、数字信号处理器(digitalsignalprocessor,简称dsp)、专用集成电路(applicationspecificintegratedcircuit,简称asic)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。210.存储器可能包含高速随机存取存储器(randomaccessmemory,简称ram),也可能还包括非不稳定的存储器(non-volatilememory,简称nvm),例如至少一个磁盘存储器,还可以为u盘、移动硬盘、只读存储器、磁盘或光盘等。211.总线可以是工业标准体系结构(industrystandardarchitecture,简称isa)总线、外部设备互连(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准体系结构(extendedindustrystandardarchitecture,简称eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本技术附图中的总线并不限定仅有一根总线或一种类型的总线。212.上述存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。213.一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于专用集成电路(applicationspecificintegratedcircuits,简称asic)中。当然,处理器和存储介质也可以作为分立组件存在于电子设备或主控设备中。214.以上所述,仅为本技术实施例的具体实施方式,但本技术实施例的保护范围并不局限于此,任何在本技术实施例揭露的技术范围内的变化或替换,都应涵盖在本技术实施例的保护范围之内。因此,本技术实施例的保护范围应以所述权利要求的保护范围为准。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献