数据查询方法和装置与流程

文档序号:14686984发布日期:2018-06-15 04:08阅读:168来源:国知局
本发明涉及数据库领域,特别涉及一种数据查询方法和装置。
背景技术
:数据库表是数据库中用于存储数据的对象,数据库表中通常以行和列的形式存储着多个值,一行数据为一个记录(例如在通讯录数据库中某个人全部的信息),一列数据(一个字段)记录有该数据库表中同一数据类型的所有值(如通讯录数据库中所有人的家庭住址)。在数据库表中查询数据时,为了更快的获取想要获取的整行数据,通常需要建立索引。索引是对数据库表中一列或多列的值进行排序的一种结构。索引通常包括主索引(一级索引)和二级索引,主索引记录有数据库表中的所有行的数据,其中,每行数据称为一个索引行,每列数据称为一个索引列,每行数据中的任一索引数据都对应于该行的行主键(Rowkey),二级索引通常是根据主索引中的索引列与这索引列中每个索引数据对应的行主键建立的。相关技术中有一种数据查询方法,在该方法中,客户端在不知道查询数据(该查询数据是客户端想要获取的整行数据中的一个索引数据)的所属索引列时,需要查询根据该查询数据多个可能所属的索引列建立的多个二级索引,而每查询一个二级索引,客户端就要向服务端(数据库位于服务端)发送一次查询请求(包含有查询数据),服务端在接收到这一查询请求后,会查询对应的二级索引,在查询完多个二级索引后,服务端向客户端返回多次查询的结果(若查询到多个二级索引中存在该查询数据,则获取该查询数据对应的行主键,根据该行主键查询主索引得到行主键对应的整行数据,最后向客户端返回该整行数据,若在多个二级索引中未查询到该查询数据,则向客户端返回没有满足条件的数据的指示)。例如:查询数据为电话号码,作为查询数据的电话号码可能属于主索引中手机号码、家庭号码和办公号码这三列数据中的任一列,客户端在查询时需要根据电话号码向服务端发送查询根据手机号码、家庭号码和办公号码这三列数据建立的三个二级索引的三个请求,服务端会根据查询这三个索引的三个请求分别查询这三个索引,之后服务端向客户端返回查询这三个索引的查询结果。发明人在实现本发明的过程中,发现上述方式至少存在如下缺陷:上述方式在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低。技术实现要素:为了解决相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题,本申请提供了一种数据查询方法和装置。所述技术方案如下:第一方面,提供一种数据查询方法,所述方法包括:数据库端接收客户端发送的包含有查询数据的查询请求,查询数据为主索引中记录的一个索引数据;数据库端根据接收到的查询请求查询主索引中的目标二级索引,得到查询数据对应的目标行主键,其中目标二级索引包含有第一索引列,该第一索引列中记录了主索引中至少两个第二索引列中的索引数据,且每个第二索引列中的每个索引数据各自与主索引中的一个行主键对应,第一索引列是指二级索引中的索引列,第二索引列是指主索引中的索引列;数据库端在获取了目标行主键后,根据目标行主键查询主索引,并获取目标行主键对应的目标索引行中的索引数据,该目标索引行中的索引数据为客户端想要获取的数据;数据库端向客户端提供目标索引行中的索引数据完成数据的查询。本申请提供的数据查询方法,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。在一个可能的设计中,该方法还包括:在建立二级索引时,数据库端从主索引中获取至少两个第二索引列中的索引数据;数据库端将获取的至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据;根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引,虚拟列为目标二级索引中的第一索引列。数据库端在建立目标二级索引时,可以给目标二级索引设置一个标识,该标识可以区分与识别目标二级索引。目标二级索引中可以记录有每个索引数据对应的行主键,也可以不记录每个索引数据对应的行主键,而是建立每个索引数据与主索引中该索引数据对应的行主键之间的映射,使每个索引数据各自指向主索引中的一个索引行的行主键。此外,建立二级索引的过程可以包含二级索引的定义过程与数据填充过程,其中二级索引的定义过程为建立二级索引的架构的过程,该架构可以认为是一个表格,且该表格确定了需要将主索引中的哪几列索引数据填入其中以及二级索引的标识;而数据填充过程为将虚拟列中的索引数据填入二级索引的架构的过程。本实现方法为建立目标二级索引的过程,数据库端可以以该方法建立任一二级索引。本申请提供的数据查询方法,通过虚拟列来作为二级索引的第一索引列,达到了目标二级索引中的第一索引列能够包含主索引中多个第二索引列的效果。在一个可能的设计中,主索引中每个第二索引列各自对应一种数据类型,根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索,包括:数据库端根据主索引中与虚拟列存在映射关系的至少两个第二索引列中每个索引列对应的数据类型确定虚拟列中每个索引数据的数据类型;数据库端在建立目标二级索引时,将虚拟列中每个索引数据的数据类型作为目标二级索引的附加列,该附加列可以指示二级索引的第一索引列中每个索引数据的数据类型。本申请提供的数据查询方法,通过在二级索引中添加附加列,达到了能够在二级索引中查询到数据类型的效果。在一个可能的设计中,根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引之后,该方法还包括:在对目标二级索引进行更新时,数据库端接收客户端发送的包含有新增索引行的写入请求;数据库端将新增索引行写入主索引,并为新增索引行分配对应的行主键;数据库端确定目标二级索引中虚拟列对应的至少两个第二索引列,其中虚拟列对应的第二索引列为与虚拟列存在映射关系的第二索引列;数据库端从新增索引行中获取属于与虚拟列对应的至少两个第二索引列中的索引数据;数据库端将新增索引行中属于至少两个第二索引列中的索引数据写入目标二级索引,完成对目标二级索引的更新。本实现方式为对目标二级索引的更新过程,数据库端接收到写入请求后,可以根据该方式更新任一二级索引。在一个可能的设计中,查询请求中还包含有目标数据类型和目标二级索引的标识,根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键,包括:数据库端根据目标二级索引的标识确定目标二级索引,该标识可以为目标二级索引的名称等可以识别目标二级索引的数据;数据库端在目标二级索引中寻找记录有目标数据类型和查询数据的目标索引行;数据库端获取目标索引行的行主键后,将目标二级索引行的行主键确定为目标行主键。本申请提供的数据查询方法,通过目标数据类型和查询数据来查询含有附加列的目标二级索引,达到了缩小搜索范围的效果。第二方面,提供一种数据查询装置,该装置包括:请求接收单元,用于接收客户端的查询请求,查询请求中包含有查询数据;索引查询单元,用于根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行;数据获取单元,用于从主索引中获取目标行主键对应的目标索引行中的索引数据;数据提供单元,用于向客户端提供目标索引行中的索引数据。在一个可能的设计中,该装置还包括:索引数据获取单元,用于从主索引中获取至少两个第二索引列中的索引数据;虚拟映射单元,用于将至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据;索引建立单元,用于根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引,虚拟列为目标二级索引中的第一索引列。在一个可能的设计中,主索引中每个第二索引列各自对应一种数据类型,索引建立单元,用于:根据主索引中的至少两个第二索引列中每个第二索引列各自对应的数据类型确定虚拟列中每个索引数据的数据类型;根据虚拟列和虚拟列中每个索引数据对应的行键值以及虚拟列中每个索引数据的数据类型建立目标二级索引,虚拟列中每个索引数据的数据类型组成目标二级索引的附加列。在一个可能的设计中,该装置还包括:写入接收单元,用于接收客户端的写入请求,写入请求中包含有新增索引行;索引写入单元,用于将新增索引行写入主索引,并为新增索引行分配对应的行主键;索引列确定单元,用于确定目标二级索引中虚拟列对应的至少两个第二索引列;新增数据获取单元,用于从新增索引行中获取属于至少两个第二索引列中的索引数据;数据写入单元,用于将新增索引行中属于至少两个第二索引列中的索引数据写入目标二级索引。在一个可能的设计中,查询请求中还包含有目标数据类型和目标二级索引的标识,索引查询单元,用于:根据目标二级索引的标识确定目标二级索引;根据目标数据类型和查询数据在目标二级索引中确定目标二级索引行,目标二级索引行中的索引数据与查询数据相同,目标二级索引行中的数据类型与目标数据类型相同;将目标二级索引行的行主键确定为目标行主键。本申请提供的技术方案可以包括以下有益效果:通过查询数据查询目标二级索引,该目标二级索引中的一个索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。图1是本发明各个实施例提供的数据查询方法所涉及的实施环境的结构示意图;图2是本发明实施例示出的一种数据查询方法的流程图;图3-1是本发明实施例示出的另一种数据查询方法的流程图;图3-2是图3-1所示实施例中建立二级索引的流程图;图3-3是图3-1所示实施例中一种二级索引的示意图;图3-4是图3-1所示实施例中另一种二级索引的示意图;图3-5是图3-1所示实施例中另一种二级索引的示意图;图3-6是图3-1所示实施例中一种获取目标行键值的流程图;图4-1是本发明实施例示出的另一种数据查询方法的流程图;图4-2是图4-1所示实施例中将新增索引行写入主索引的示意图;图4-3是图4-1所示实施例中从索引列获取索引数据的示意图;图5-1是本发明实施例示出的一种数据查询装置的框图;图5-2是本发明实施例示出的另一种数据查询装置的框图;图5-3是本发明实施例示出的另一种数据查询装置的框图;图6是本发明实施例提供的一种数据查询装置的结构图。通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。图1是本发明各个实施例提供的数据查询方法所涉及的实施环境的结构示意图,该实施环境可以包括:客户端11和数据库端12。客户端11为用来供用户对数据库中的数据进行查询的终端,客户端11可以是手机和计算机等终端。本实施环境不对客户端11的数量作出限制。数据库端12中存储有数据库的数据,可以供客户端11进行查询,数据库端12可以为一台服务器,或者由若干台服务器组成的服务器集群,或者是一个云计算服务中心。客户端11和数据库端12可以建立有有线连接或无线连接,此外客户端11和数据库端12还可以位于一台设备中,本实施环境不作出限制。图2是本发明实施例示出的一种数据查询方法的流程图,本实施例以该数据查询方法应用于图1所示实施环境中的数据库端12来举例说明。该数据查询方法可以包括如下几个步骤:步骤201,接收客户端的查询请求,查询请求中包含有查询数据。步骤202,根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行。步骤203,从主索引中获取目标行主键对应的目标索引行中的索引数据。步骤204,向客户端提供目标索引行中的索引数据。综上所述,本发明实施例提供的数据查询方法,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。图3-1是本发明实施例示出的另一种数据查询方法的流程图,本实施例以该数据查询方法应用于图1所示实施环境中的数据库端12来举例说明。该数据查询方法可以包括如下几个步骤:步骤301,根据主索引中的第二索引列建立至少一个二级索引,至少一个二级索引包括目标二级索引。在使用本发明实施例提供的数据查询方法时,可以首先根据主索引中的第二索引列建立至少一个二级索引,该至少一个二级索引可以包括目标二级索引,目标二级索引为一次数据查询(如本发明实施例进行的数据查询)中需要用到的二级索引。本发明各个实施例所涉及的第二索引列是指主索引中的索引列。为便于解释建立本发明实施例提供的二级索引的原理,以建立目标二级索引(本发明实施例进行的查询要用到的二级索引)为例来描述,如图3-2所示,本步骤可以包括下面3个子步骤:子步骤3011,从主索引中获取至少两个第二索引列中的索引数据。在建立至少一个二级索引时,可以首先从数据库的主索引中获取至少两个第二索引列中的索引数据。这至少两个第二索引列的索引数据可以是后续用来建立目标二级索引的数据。示例性的,在选择这至少两个第二索引列时,可以根据主索引中每个第二索引列的选择度的大小来进行选择,其中选择度为一个第二索引列中不同索引数据的数目与该第二索引列中索引数据总数的比值(如索引列A中有2000个索引数据,其中有1000个不同的值,则该索引列A的选择度为1000/2000=0.5),该比值越大,选择度就越大,以该第二索引列建立的二级索引的查询效率就越高。在本步骤中可以获取主索引中选择度较大的几个(至少两个)第二索引列中的索引数据。需要说明的是,本步骤还可以通过其它方式来选择第二索引列以提高后续建立的目标二级索引的查询效率,本发明实施例不作出限制。子步骤3012,将至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据。在获取了至少两个第二索引列中的索引数据之后,可以将至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据。由于数据库中的二级索引通常是根据主索引中的一个第二索引列中的索引数据所建立的,但本发明实施例建立的二级索引需要根据主索引中的至少两个第二索引列的索引数据来建立,主索引中并没有哪个第二索引列包含有这至少两个第二索引列的索引数据,因此可以首先建立一个虚拟列,并使该虚拟列对应于该至少两个第二索引列中的索引数据,之后可以以该虚拟列作为二级索引的第一索引列。子步骤3013,根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引,虚拟列为目标二级索引中的第一索引列。在获得虚拟列之后,可以根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引。其中,行主键可以通过主索引来获取。在根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引时,可以首先建立目标二级索引的架构,(该建立过程可以称为定义目标二级索引的过程),该架构可以理解为一个未填充数据的表格(该表格确定了需要将主索引中的哪几列索引数据填入其中以及目标二级索引的名称),之后可以将虚拟列中的索引数据填入其中,即目标二级索引可以包含有目标二级索引的架构以及填入该架构中的索引数据。此外,还可以先确定目标二级索引的架构,再获取主索引中的索引数据,最后将索引数据填入目标二级索引的架构中,本发明实施例不作出限制。本发明各个实施例所涉及的第一索引列是指二级索引中的索引列。需要说明的是,在建立二级索引时,可以设置二级索引的名称,并将该名称作为二级索引的标识,以方便用户端选择二级索引以及数据库端区分二级索引。例如,在设置目标二级索引的名称时,可以参考该二级索引中的虚拟列(包含有主索引中多个第二索引列的索引数据)中索引数据的多个数据类型,示例性的,一个二级索引中的虚拟列包含有数据类型为“手机号码”、“座机号码”和“办公号码”这三个数据类型的索引数据,则可以将该二级索引命名为“电话号码”,此种为对主索引中的数据类型进行上位的命名方式,而本发明实施例建立的二级索引还可以有其它命名方式,本发明实施例不作出限制。本步骤在建立目标二级索引时,可以包括下面两种方式:第一种方式:将虚拟列作为该目标二级索引中的第一索引列,并建立该第一索引列中的每个索引数据与主索引中该索引数据对应的行主键之间的映射。也就是说,使目标二级索引的第一索引列中每个索引数据各自指向主索引中的一个索引行的行主键。如图3-3所示,其中,“索引列β”为第一索引列L1的名称,该名称可以由数据库端进行设置,二级索引S2中实际仅记录了第一索引列L1,而第一索引列L1中的每个索引数据均与主索引S1中的索引行的行主键存在映射关系。需要说明的是,第一索引列L1中的多个索引数据可能在主索引S1中映射为一个行主键。第二种方式:将虚拟列作为该目标二级索引中的第一索引列,并建立一个行主键列,使目标二级索引的第一索引列中的每个索引数据与对应的行主键位于同一行,即将行主键直接记录在目标二级索引中,如图3-4所示,其中二级索引S2中包括第一索引列L1和行主键列K1,第一索引列L1中的每个索引数据各自与行主键列K1中同一行的行主键对应。需要说明的是,在通过上述两种方式建立目标二级索引时,还可以在目标二级索引中添加一个附加列,该过程可以包括:1)根据主索引中的至少两个第二索引列中每个第二索引列各自对应的数据类型确定虚拟列中每个索引数据的数据类型。由于虚拟列与主索引中的至少两个第二索引列存在映射关系,因而可以根据这至少两个第二索引列中的索引数据对应的数据类型确定虚拟列中每个索引数据的数据类型。其中,主索引中的每个第二索引列各自对应于一种数据类型,该第二索引列中的每个索引数据都为同种数据类型。示例性的,一个第二索引列与数据类型“出生日期”所对应,则该第二索引列中记录的任一索引数据的数据类型为“出生日期”。2)根据虚拟列和虚拟列中每个索引数据对应的行键值以及虚拟列中每个索引数据的数据类型建立目标二级索引。在获取了虚拟列中索引数据的数据类型之后,可以根据虚拟列和虚拟列中每个索引数据对应的行键值以及虚拟列中每个索引数据的数据类型建立目标二级索引,即虚拟列中每个索引数据的数据类型组成了目标二级索引的附加列,如图3-5所示,其为上述第二种方式建立的目标二级索引,该目标二级索引S2中包含有第一索引列L1、行主键列K1和附加列F。而通过上述第一种方式建立的目标二级索引中包括第一索引列和附加列,在此不再赘述。需要说明的是,在主索引中某一行的多个索引数据存在重复的情况,且该情况可能影响查询结果时(可能无法得知索引数据的数据类型),还可以将虚拟列中每个索引数据的数据类型直接记录于虚拟列中,以方便数据库端在虚拟列中的索引数据出现重复时进行区分,其中索引数据的数据类型可以表明该索引数据在主索引中所属的第二索引列。数据库端可以通过步骤3011和步骤3013建立包含目标二级索引在内的多个二级索引。步骤302,接收客户端的查询请求,查询请求中包含有查询数据。在建立了包含目标二级索引的至少一个二级索引之后,可以接收客户端的查询请求,该查询请求中包含有查询数据,该查询数据为主索引中的一个索引数据。查询请求中还可以包含有目标二级索引的标识,该标识用于在多个二级索引中确定目标二级索引。步骤303,根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键。在获取了客户端的查询请求之后,数据库端可以根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键。其中,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行。由于目标二级索引是根据多个第二索引列中的索引数据建立的,因而一次查询操作就可以查询多个主索引中的第二索引列,而现有技术中的二级索引是根据主索引中的一个第二索引列建立的,一次查询操作只能查询主索引中的一个第二索引列,若要达到和本发明实施例建立的二级索引同样的搜索效果,就需要进行多次查询,查询效率较低。示例性的,相关技术中,数据库端在进行查询时的语句可以为“SELECT*FROMUserInfoWHEREHomePhone='185333'ORTelphone='185333'OROfficePhone='185333';”,其中,“UserInfo”为主索引的名称,“HomePhone”、“Telphone”和“OfficePhone”为主索引的三个二级索引的名称,这三个二级索引均是根据其记录的第二索引列的名称(第二索引列的名称可以为主索引中该第二索引列的数据类型)命名的,例如名称为“OfficePhone”的二级索引是根据名称为“OfficePhone”的第二索引列建立的,“185333”为查询数据。该语句表示数据库端在名为“UserInfo”的主索引中,以查询数据“185333”分别查询名为“HomePhone”、“Telphone”和“OfficePhone”的三个第二索引列,需要查询三个二级索引。这种查询方式在主索引中的数据量较大时,会严重耗费数据库端的性能,影响查询速度。而本发明实施例中,数据库端在进行查询时的语句可以为“SELECT*FROMUserInfoWHEREPhoneNum='185333';”其中“PhoneNum”为步骤301建立的二级索引中的一个二级索引的名称(即该二级索引的标识),该二级索引可以是根据名称为“HomePhone”、“Telphone”和“OfficePhone”的三个第二索引列建立而成的,该语句表示数据库端在名为“UserInfo”的主索引中,以查询数据“185333”查询名称为“PhoneNum”的二级索引,只需要进行一次查询就能达到相关技术中三次查询的效果,查询过程简单快捷。而在查询请求中包含有目标数据类型和目标二级索引的标识时,如图3-6所示,本步骤可以包括下面3个子步骤:在子步骤3031中,根据目标二级索引的标识确定目标二级索引。数据库端首先可以根据目标二级索引的标识在主索引的多个二级索引中确定目标二级索引。在子步骤3032中,根据目标数据类型和查询数据在目标二级索引中确定目标二级索引行,目标二级索引行中的索引数据与查询数据相同,且目标二级索引行中的数据类型与目标数据类型相同。数据库端在确定了目标二级索引之后,可以根据目标数据类型和查询数据在目标二级索引中确定目标二级索引行,目标二级索引行中的索引数据与查询数据相同,目标二级索引行中的数据类型与目标数据类型相同,即数据库找到记录的数据与目标数据类型和查询数据相同的一行,并将该行确定为目标二级索引行。需要说明的是,在二级索引中包含有附加列时,可以将二级索引看做一个复合索引,根据目标数据类型与查询数据来查询二级索引时,能够达到减小查询范围的效果,这是由于数据库中通常是按照索引数据来进行排序的,因而相同的索引数据会相邻进行排列,这样数据库端在二级索引中查询时,只需要在二级索引中查询所有记录有目标数据类型的行,或者在二级索引中查询所有记录有查询数据的行,就能够完成对二级索引的查询。此外,由于数据类型的重复率较高,因而二级索引中可以按数据类型进行排列。示例性的,如表1所示,其为一个二级索引的示意表。行主键附加列第一索引列2男1754男1693女1601女165在表1中最左边一列为行主键列,中间一列为以数据类型添加的附加列,最右边一列为记录有索引数据的第一索引列,其中的排列顺序是以附加列进行排序的,若查询请求中的查询数据为“169”,目标数据类型为“男”,则数据库端在查询时,只需要从第一行开始,查询完所有附加列为“男”的索引行,就能够完成对该二级索引的查询。在子步骤3033中,将目标二级索引行的行主键确定为目标行主键。数据库端在确定了目标二级索引行之后,可以通过目标二级索引获取该目标二级索引行的行主键,并将该行主键确定为目标行主键。步骤304,从主索引中获取目标行主键对应的目标索引行中的索引数据。数据库端在获取了查询数据对应的目标行主键之后,可以从主索引中获取该目标行主键对应的目标索引行中的索引数据,该索引数据即为客户端想要获取的数据。示例性的,主索引为图3-3中的主索引S1,目标行主键为“3”,则可以从主索引S1中获取索引数据“3a、3b、3c、3d”。步骤305,向客户端提供目标索引行中的索引数据。数据库端在获取了目标索引行中的索引数据之后,可以向客户端提供目标索引行中的索引数据,以完成客户端的查询请求。需要补充说明的是,本发明实施例提供的数据查询方法,通过将至少两个第二索引列中的索引数据映射为一个虚拟列,达到了可以根据该虚拟列以及该虚拟列中的索引数据对应的行主键建立二级索引的效果。综上所述,本发明实施例提供的数据查询方法,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。图4-1是本发明实施例示出的另一种数据查询方法的流程图,本实施例以该数据查询方法应用于图1所示实施环境中的数据库端12来举例说明。该数据查询方法可以包括如下几个步骤:步骤401,根据主索引中的第二索引列建立至少一个二级索引,至少一个二级索引包括目标二级索引。在使用本发明实施例提供的数据查询方法时,可以首先根据主索引中的第二索引列建立至少一个二级索引,该至少一个二级索引可以包括目标二级索引,目标二级索引为一次查询(本发明实施例进行的查询)中需要用到的二级索引。本步骤可以参考图3-1所示实施例中的步骤301,在此不再赘述。步骤402,接收客户端的写入请求,写入请求中包含有新增索引行。在建立了包含有目标二级索引的至少一个二级索引之后,若用户想要在主索引中写入新的索引行(记录),则可以通过客户端向数据库端发送写入请求,该写入请求中包含有新增索引行。步骤403,将新增索引行写入主索引,并为新增索引行分配对应的行主键。数据库端在获取了新增索引行之后,可以将新增索引行写入主索引,并为新增索引行分配对应的行主键。新增索引行在写入主索引之后,数据库端可以为该新增索引行分配一个对应的行主键。示例性的,如图4-2所示,其为将新增索引行z写入主索引S1得到更新后的主索引S1的示意图,主索引S1中包含有名称为“手机号码”、“座机号码”、“姓名”和“办公号码”4个第二索引列以及一个行主键列,新增索引行z中记录有“手机号码”、“座机号码”、“姓名”和“办公号码”这4种类型的数据,在该图中新增索引行z添加为了主索引S1中的最后一个索引行。步骤404,确定目标二级索引中虚拟列对应的至少两个第二索引列。数据库端在将新增索引行写入主索引,并为新增索引行分配对应的行主键后,可以开始更新目标二级索引,在更新目标二级索引时,可以首先确定目标二级索引中虚拟列对应的至少两个第二索引列。其中,虚拟列对应的第二索引列为与虚拟列存在映射关系的第二索引列。步骤405,从新增索引行中获取属于该至少两个第二索引列中的索引数据。在确定目标二级索引中虚拟列对应的至少两个第二索引列后,可以从新增索引行中获取属于这些第二索引列中的索引数据。示例性的,如图4-3所示,其为写入了新增索引行z的主索引S1,若目标二级索引中虚拟列对应的第二索引列为“手机号码”和“座机号码”,则可以获取属于“手机号码”和“座机号码”中的索引数据“139xxxx2”和“023xxxx3”。步骤406,将新增索引行中属于该至少两个第二索引列中的索引数据写入目标二级索引。在获取了新增索引行中属于虚拟列对应的至少两个第二索引列的索引数据后,可以将这些索引数据写入目标二级索引,与此同时,可以将新增索引行的行主键写入目标二级索引,或者在目标二级索引中建立这些索引数据与新增索引行的行主键间的映射关系。示例性的,以图4-3所示的主索引S1为例,若二级索引S2是根据第二索引列“手机号码”和“座机号码”建立的,而在步骤406中获取的新增索引行z中这两个第二索引列的索引数据为“139xxxx2”和“023xxxx3”,则可以将“139xxxx2”和“023xxxx3”写入二级索引S2,并将新增索引行z的行主键“101”写入二级索引S2,或者在二级索引S2中建立“139xxxx2”和“023xxxx3”与新增索引行z的行主键“101”间的映射关系。步骤402至步骤406为更新目标二级索引的步骤,数据库端可以根据这几个步骤更新任一二级索引。步骤407,接收客户端的查询请求,查询请求中包含有查询数据。数据库端可以接收客户端的查询请求,查询请求中包含有查询数据,该查询数据为主索引中的一个索引数据。查询请求中还可以包含有目标二级索引的标识,该标识用于在多个二级索引中确定目标二级索引。步骤408,根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键。在获取了客户端的查询请求之后,数据库端可以根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键。其中,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行。本步骤可以参考图3-1所示实施例中的步骤304,在此不再赘述。步骤409,从主索引中获取目标行主键对应的目标索引行中的索引数据。在获取了查询数据对应的目标行主键之后,可以从主索引中获取该目标行主键对应的目标索引行中的索引数据,该索引数据即为客户端想要获取的数据。步骤410,向客户端提供目标索引行中的索引数据。数据库端在获取了目标索引行中的索引数据之后,可以向客户端提供目标索引行中的索引数据,以完成客户端的查询请求。需要补充说明的是,本发明实施例提供的数据查询方法,通过获取客户端发送的写入请求,并根据该写入请求来更新二级索引,达到了可以对记录有多个第二索引列中的索引数据的二级索引进行更新的效果。综上所述,本发明实施例提供的数据查询方法,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。图5-1是本发明实施例示出的一种数据查询装置的框图,该数据查询装置可以通过软件、硬件或者两者的结合实现成为数据库端12的部分或者全部。该数据查询装置500可以包括:请求接收单元501,用于接收客户端的查询请求,查询请求中包含有查询数据。索引查询单元502,用于根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行。数据获取单元503,用于从主索引中获取目标行主键对应的目标索引行中的索引数据。数据提供单元504,用于向客户端提供目标索引行中的索引数据。综上所述,本发明实施例提供的数据查询装置,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。可选的,如图5-2所示,该数据查询装置500还包括:索引数据获取单元505,用于从主索引中获取至少两个第二索引列中的索引数据。虚拟映射单元506,用于将至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据。索引建立单元507,用于根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引,虚拟列为目标二级索引中的第一索引列。可选的,主索引中每个第二索引列各自对应一种数据类型,索引建立单元507,用于:根据主索引中的至少两个第二索引列中每个第二索引列各自对应的数据类型确定虚拟列中每个索引数据的数据类型。根据虚拟列和虚拟列中每个索引数据对应的行键值以及虚拟列中每个索引数据的数据类型建立目标二级索引,虚拟列中每个索引数据的数据类型组成目标二级索引的附加列。可选的,如图5-3所示,数据查询装置500还包括:写入接收单元508,用于接收客户端的写入请求,写入请求中包含有新增索引行。索引写入单元509,用于将新增索引行写入主索引,并为新增索引行分配对应的行主键。索引列确定单元510,用于确定目标二级索引中虚拟列对应的至少两个第二索引列。新增数据获取单元511,用于从新增索引行中获取属于至少两个第二索引列中的索引数据。数据写入单元512,用于将新增索引行中属于至少两个第二索引列中的索引数据写入目标二级索引。可选的,查询请求中还包含有目标数据类型和目标二级索引的标识,索引查询单元502,用于:根据目标二级索引的标识确定目标二级索引。根据目标数据类型和查询数据在目标二级索引中确定目标二级索引行,目标二级索引行中的索引数据与查询数据相同,目标二级索引行中的数据类型与目标数据类型相同。将目标二级索引行的行主键确定为目标行主键。需要补充说明的是,本发明实施例提供的数据查询装置,通过将至少两个第二索引列中的索引数据映射为一个虚拟列,达到了可以根据该虚拟列以及该虚拟列中的索引数据对应的行主键建立二级索引的效果。需要补充说明的是,本发明实施例提供的数据查询装置,通过获取客户端发送的写入请求,并根据该写入请求来更新二级索引,达到了可以对记录有多个第二索引列中的索引数据的二级索引进行更新的效果。综上所述,本发明实施例提供的数据查询装置,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。图6是本发明一个实施例提供的数据查询装置的结构图,包括至少一个处理器610(例如CPU),至少一个网络接口620或者其他通信接口,存储器630,和至少一个通信总线640,用于实现这些装置之间的连接通信。处理器610用于执行存储器630中存储的程序631。存储器630可能包含高速随机存取存储器(RAM:RandomAccessMemory),也可能还包括非不稳定的存储器(non-volatilememory),例如至少一个磁盘存储器。通过至少一个网络接口620(可以是有线或者无线)实现该数据查询装置与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。网络接口620,用于接收客户端的查询请求,查询请求中包含有查询数据。处理器610,用于根据查询请求查询主索引的目标二级索引,得到查询数据对应的目标行主键,目标二级索引包括第一索引列,第一索引列中记录有主索引中的至少两个第二索引列中的索引数据,至少两个第二索引列中每个索引数据各自对应一个行主键,行主键对应于主索引中的一个索引行。处理器610,用于从主索引中获取目标行主键对应的目标索引行中的索引数据。网络接口620,用于向客户端提供目标索引行中的索引数据。可选的,处理器610,用于从主索引中获取至少两个第二索引列中的索引数据。处理器610,用于将至少两个第二索引列中的索引数据映射为一个虚拟列,虚拟列中记录有至少两个第二索引列中的索引数据。处理器610,用于根据虚拟列和虚拟列中每个索引数据对应的行主键建立目标二级索引,虚拟列为目标二级索引中的第一索引列。可选的,主索引中每个第二索引列各自对应一种数据类型。处理器610,用于根据主索引中的至少两个第二索引列中每个第二索引列各自对应的数据类型确定虚拟列中每个索引数据的数据类型。处理器610,用于根据虚拟列和虚拟列中每个索引数据对应的行键值以及虚拟列中每个索引数据的数据类型建立目标二级索引,虚拟列中每个索引数据的数据类型组成目标二级索引的附加列。可选的,网络接口620,用于接收客户端的写入请求,写入请求中包含有新增索引行。处理器610,用于将新增索引行写入主索引,并为新增索引行分配对应的行主键。处理器610,用于确定目标二级索引中虚拟列对应的至少两个第二索引列。处理器610,用于从新增索引行中获取属于至少两个第二索引列中的索引数据。处理器610,用于将新增索引行中属于至少两个第二索引列中的索引数据写入目标二级索引。可选的,查询请求中还包含有目标数据类型和目标二级索引的标识。处理器610,用于根据目标二级索引的标识确定目标二级索引。处理器610,用于根据目标数据类型和查询数据在目标二级索引中确定目标二级索引行,目标二级索引行中的索引数据与查询数据相同,目标二级索引行中的数据类型与目标数据类型相同。处理器610,用于将目标二级索引行的行主键确定为目标行主键。需要补充说明的是,本发明实施例提供的数据查询装置,通过将至少两个索引列中的索引数据映射为一个虚拟列,达到了可以根据该虚拟列以及该虚拟列中的索引数据对应的行主键建立二级索引的效果。需要补充说明的是,本发明实施例提供的数据查询装置,通过获取客户端发送的写入请求,并根据该写入请求来更新二级索引,达到了可以对记录有多个第二索引列中的索引数据的二级索引进行更新的效果。综上所述,本发明实施例提供的数据查询装置,通过查询数据查询目标二级索引,该目标二级索引中的第一索引列中记录有至少两个第二索引列中的索引数据,得到查询数据对应的行主键,再获取该行主键对应的索引数据,解决了相关技术中在进行查询时,需要分别查询多个二级索引,查询过程的操作成倍增长,查询效率较低的问题;达到了进行一次查询就能够查询多个第二索引列中的索引数据的效果,查询过程操作简单,查询效率较高。关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1