CN103810300B - 用于非索引覆盖的数据查询方法和装置 - Google Patents

用于非索引覆盖的数据查询方法和装置 Download PDF

Info

Publication number
CN103810300B
CN103810300B CN201410086556.7A CN201410086556A CN103810300B CN 103810300 B CN103810300 B CN 103810300B CN 201410086556 A CN201410086556 A CN 201410086556A CN 103810300 B CN103810300 B CN 103810300B
Authority
CN
China
Prior art keywords
index
nonclustered
value
key
clusters
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
Application number
CN201410086556.7A
Other languages
English (en)
Other versions
CN103810300A (zh
Inventor
洪超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Gridsum Technology Co Ltd
Original Assignee
Beijing Gridsum Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Gridsum Technology Co Ltd filed Critical Beijing Gridsum Technology Co Ltd
Priority to CN201410086556.7A priority Critical patent/CN103810300B/zh
Publication of CN103810300A publication Critical patent/CN103810300A/zh
Application granted granted Critical
Publication of CN103810300B publication Critical patent/CN103810300B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种用于非索引覆盖的数据查询方法和装置。其中,用于非索引覆盖的数据查询方法包括:获取数据库表的非聚集索引的过滤条件;在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值;以及将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询。通过本发明,达到了提升数据查询性能的效果。

Description

用于非索引覆盖的数据查询方法和装置
技术领域
本发明涉及数据库领域,具体而言,涉及一种用于非索引覆盖的数据查询方法和装置。
背景技术
在数据库表有聚集索引的情况下,当用数据库表的非聚集索引列作为过滤条件,根据该列来从数据库表中获取数据列时,获取的数据列在非聚集索引里通常都不是索引覆盖(即非聚集索引缺少某些选择的数据列),此时数据库系统如SQLServer执行非聚集索引查找,并对于不包含的数据列执行书签查找,或者执行聚集索引扫描。在数据量大时,无论是执行非聚集索引查找还是执行聚集索引扫描,都造成数据查询性能降低。
例如,FactSession表在SessionTimeKey(时间列)上建立有聚集索引,在SessionKey上面建立有非聚集索引,非索引覆盖的非聚集索引查询代码如下:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
在上述举例中可以看出,非聚集索引查询是通过非聚集索引里的SessionKey进行过滤查询,但在选择列里面除了SessionKey还包含了BrowserKey,这个BrowserKey便导致了这条查询不是非聚集索引的索引覆盖的情况,因此,变成整数据表的聚集索引扫描。
针对现有技术中在数据量大时造成对数据库表的数据查询性能降低的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种用于非索引覆盖的数据查询方法和装置,以解决在数据量大时造成对数据库表的数据查询性能降低的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种用于非索引覆盖的数据查询方法。根据本发明的用于非索引覆盖的数据查询方法包括:获取数据库表的非聚集索引的过滤条件;在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值;以及将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询。
进一步地,获取聚集索引的聚簇键的值包括:从非聚集索引中查找满足过滤条件的记录行;以及获取记录行对应的聚簇键的值。
进一步地,在获取记录行对应的聚簇键的值之后,数据查询方法还包括:对获取的记录行对应的聚簇键的值去重;以及将去重后的聚簇键的值插入到临时表,将临时表和过滤条件作为查询条件。
进一步地,在确定通过非聚集索引对非索引覆盖的数据表进行查询之前,数据查询方法还包括:提取数据库表的所有非聚集索引;基于提取到的非聚集索引判断非聚集索引是否包含所有数据列;以及如果判断出非聚集索引不包含所有数据列,则确定非聚集索引里非索引覆盖。
进一步地,在提取数据库中的所有非聚集索引之后,数据查询方法还包括:将提取到的非聚集索引存储到缓存;以及当再次确定通过非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
为了实现上述目的,根据本发明的另一方面,提供了一种用于非索引覆盖的数据查询装置。根据本发明的用于非索引覆盖的数据查询装置包括:第一获取单元,用于获取数据库表的非聚集索引的过滤条件;第二获取单元,用于在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值;以及查询单元,用于将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询。
进一步地,第二获取单元包括:查找模块,用于从非聚集索引中查找满足过滤条件的记录行;以及获取模块,用于获取记录行对应的聚簇键的值。
进一步地,数据查询装置还包括:去重单元,用于在获取记录行对应的聚簇键的值之后,对获取的记录行对应的聚簇键的值去重;以及插入单元,用于将去重后的聚簇键的值插入到临时表,将临时表和过滤条件作为查询条件。
进一步地,数据查询装置还包括:提取单元,用于提取数据库表的所有非聚集索引;判断单元,用于基于提取到的非聚集索引判断非聚集索引是否包含所有数据列;以及确定单元,用于当判断出非聚集索引不包含所有数据列,确定非聚集索引里非索引覆盖。
进一步地,数据查询装置还包括:存储单元,用于在提取数据库中的所有非聚集索引之后,将提取到的非聚集索引存储到缓存;以及第三获取单元,用于当再次确定通过非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
通过本发明,采用获取数据库表的非聚集索引的过滤条件;在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值;以及将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询,解决了在数据量大时造成对数据库表的数据查询性能降低的问题,显著地降低了物理IO,达到了提升数据查询性能的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明第一实施例的用于非索引覆盖的数据查询方法的流程图;
图2是根据本发明第二实施例的用于非索引覆盖的数据查询方法的流程图;
图3是根据本发明第一实施例的用于非索引覆盖的数据查询装置的示意图;以及
图4是根据本发明第二实施例的用于非索引覆盖的数据查询装置的示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
图1是根据本发明第一实施例的用于非索引覆盖的数据查询方法的流程图。如图1所示,该用于非索引覆盖的数据查询方法包括步骤如下:
步骤S102,获取数据库表的非聚集索引的过滤条件。
数据库表可以是数据库中的数据表,非聚集索引也可以称为非聚簇索引。在对数据库表进行查询时,如果只有非聚集索引的过滤条件进行查询时,可以获取数据库表的非聚集索引的过滤条件。
例如,FactSession表在SessionTimeKey(时间列)上建立有聚集索引,在SessionKey上面建立有非聚集索引,非索引覆盖的非聚集索引查询代码如下:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
其中,非聚集索引的过滤条件为SessionKey>7342,获取该过滤条件,以便于对数据列进行查询。
步骤S104,在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值。
聚集索引也可以称为聚簇索引,当确定通过非聚集索引对非索引覆盖的数据库表进行查询时,即,在只有数据库表的非聚集索引作为过滤条件进行查询时,获取聚集索引的聚簇键的值。一般地,所有数据库的非聚集索引都会存储一个指针列,用于唯一标识这一行所在的物理存储位置,对于有聚集索引的,为聚簇键的值,对于无聚簇的堆表,为无序的RID即RowID。在数据库系统例如SQLServer里,数据库表存储方式分为两种,一种是没有聚簇索引的表,其存储方式是无序的堆存储;另一种是有聚簇索引的表,其存储方式是按聚簇索引所指定的键列,即聚簇键,进行顺序存储的,这里的聚簇键的值,可以是指的是数据库表里面每一行记录的聚簇键那些数据列的值。获取聚集索引的聚簇键的值,可以是获取多个聚簇键的值,也可以是获取所有聚簇键的值。当然,也可以是获取到满足上述非聚集索引的过滤条件的所有聚簇键的值的集合,并将满足过滤条件的所有聚簇键的值插入到临时表中,其中,聚簇键的值的集合,可以是满足过滤条件的那些记录行的聚簇键的值的集合。获取聚集索引的聚簇键的值,以便于将该聚簇键的值与非聚集索引的过滤条件一起作为查询条件对数据库表进行查询。
步骤S106,将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询。
在获取到非聚集索引的过滤条件和聚集索引的聚簇键的值之后,可以将过滤条件和聚簇键的值作为查询条件,对数据库表进行查询。具体地,可以是先通过非聚集索引对相应的数据列进行查找,并找出满足非聚集索引的过滤条件的聚集索引的聚簇键的值,通过聚簇键的值查找出所有数据记录行,并选出包含的数据列和未包含的数据列,无需对整个数据库表的聚集索引进行扫描,有效地将非索引覆盖的查询所使用的聚集索引扫描操作转化为两次索引查找操作,解决了在数据量大时造成对数据库表的数据查询性能降低的问题,显著地降低了物理IO,达到了提升数据查询性能的效果。
优选地,获取聚集索引的聚簇键的值包括:从非聚集索引中查找满足过滤条件的记录行;以及获取记录行对应的聚簇键的值。
由于聚集索引的聚簇键的值的逻辑顺序决定了相应的记录行的物理顺序,可以先通过非聚集索引的过滤条件查找出所有满足该过滤条件的记录行,然后获取这些记录行对应的聚簇键的值,将获取的记录行对应的聚簇键的值作为聚集索引的聚簇键的值。
根据本发明实施例,通过将非聚集索引中查找满足过滤条件的记录行,并获取记录行对应的聚簇键的值,从而可以进一步基于记录行对应的聚簇键的值进行聚集索引查询,进一步提高了数据查询的性能,提高了数据查询的速度。
优选地,在获取记录行对应的聚簇键的值之后,数据查询方法还包括:
步骤一,对获取的记录行对应的聚簇键的值去重。
由于获取的聚簇键的值会存在重复,在获取到记录行对应的聚簇键的值之后,可以对聚簇键的值进行去重,从而保留聚簇键的唯一值,进一步提高数据查询的效率。
步骤二,将去重后的聚簇键的值插入到临时表,将临时表和过滤条件作为查询条件。
将去重后的聚簇键的值插入到临时表中,以便于查找出临时表中的唯一的聚簇键的值的数据记录行。
例如:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
上述非索引覆盖的非聚集索引查询代码可以转化为以下两部分实现,其中,第一部分为:
SELECT distinct SessionTimeKey INTO#tmp FROM dbo.FactSession WHERESessionKey>7342
从SessionKey这个非聚簇索引中查找出满足条件SessionKey>7342的所有记录行,并选取出这些记录行的所有对应的聚簇键SessionTimeKey的值的一个集合,再将此集合插入到临时表#tmp里。通过非聚集索引对相关列的查找,找出所有满足过滤条件的聚集键的值集合,并去重插入到临时表里。前提是所有数据库的非聚簇索引都会存储一个指针列,用于唯一标识这一行所在的物理存储位置,对于有聚簇索引的,为聚簇键的值,对于无聚簇的堆表,为无序的RID即RowID。
第二部分为:
SELECT SessionKey,BrowserKey
FROM dbo.FactSession
WHERE SessionKey>7342
AND SessionTimeKey IN(SELECT SessionTimeKey FROM#tmp)
从表FactSession的聚簇索引中查找出所有聚簇键的值存在于临时表#tmp里的数据记录行,并选取出SessionKey,BrowserKey列。在聚集索引里进行查询,其查询条件为第一部分中聚集键的集合加上非聚集索引的过滤条件。从而将非聚集索引的非索引覆盖查询转化为聚集索引查询,提升了数据查询的性能,提高了数据查询的速度。
图2是根据本发明第二实施例的用于非索引覆盖的数据查询方法的流程图。该实施例的用于非索引覆盖的数据查询方法可以是上述实施例的用于非索引覆盖的数据查询方法的一种优选实施方式。如图2所示,该用于非索引覆盖的数据查询方法包括步骤如下:
步骤S202,获取数据库表的非聚集索引的过滤条件。
数据库表可以是数据库中的数据表,非聚集索引也可以称为非聚簇索引。在对数据库表进行查询时,如果只有非聚集索引的过滤条件进行查询时,可以获取数据库表的非聚集索引的过滤条件。
例如,FactSession表在SessionTimeKey(时间列)上建立有聚集索引,在SessionKey上面建立有非聚集索引,非索引覆盖的非聚集索引查询代码如下:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
其中,非聚集索引的过滤条件为SessionKey>7342,获取该过滤条件,以便于对数据列进行查询。
步骤S204,提取数据库表的所有非聚集索引。
提取数据库表的所有非聚集索引可以是提取数据库表所处的数据库中的所有数据表的非聚集索引,当然,也可以是提取所有数据表的聚集索引。可以通过元数据查询,查询出此数据库表的有关的所有索引。具体地,可以是先提取SQL语句中的查询的条件列和选择列。例如,对将要执行的SQL语句进行提取,提取SQL语句中的条件列和选择列。在上述例子的SQL语句中,可得出查询的条件列为SessionKey,选择列为BrowserKey,相对应的索引分别为,聚簇索引:SessionTimeKey(自动包含所有列,聚簇索引为表的物理存储),非聚簇索引:SessionKey,无包含列。通过提取的查询的条件列(SessionKey)去查找所有索引中键列为此列的索引,这里找到了非聚簇索引SessionKey的键列。
步骤S206,基于提取到的非聚集索引判断非聚集索引是否包含所有数据列。
在提取到数据库表的所有非聚集索引之后,可以判断数据库表的非聚集索引是否包含了所有数据列,如果包含了所有数据列则表明非聚集索引为索引覆盖,反之,则表明非聚集索引不是索引覆盖。当确定非聚集索引为索引覆盖时,无需进行转化;当确定非聚集索引不是索引覆盖,即非索引覆盖时,则可以获取聚集索引的聚簇键的值,以便于转化为聚集索引查询。
步骤S208,如果判断出非聚集索引不包含所有数据列,则确定非聚集索引里非索引覆盖。
具体地,对上面的SessionKey的非聚簇索引,可以是判断其是否包含了查询里的包含列(SessionTimeKey),判断结果为未包含,从而确定为非索引覆盖。
步骤S210、步骤S212分别于步骤S104、步骤S106相同,这里不做赘述。
根据本发明实施例,通过确定是否索引覆盖,在索引覆盖时,直接通过非聚集索引的过滤条件进行查询,如果未非索引覆盖时,则将数据查询转化为聚集索引查询,从而增加了数据查询的灵活性。
优选地,在提取数据库中的所有非聚集索引之后,数据查询方法还包括:将提取到的非聚集索引存储到缓存;以及当再次确定通过非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
在提取数据库中的所有非聚集索引之后,可以将提取的数据库中的所有非聚集索引存储到缓存中,以便于在后续查询中无需进行索引的提取操作,可直接从缓存中获取非聚集索引,进行索引覆盖的判断,从而进一步地提高数据查询的效率。
本发明实施例还提供了一种用于非索引覆盖的数据查询装置。该方法运行在计算机设备上。需要说明的是,本发明实施例的用于非索引覆盖的数据查询装置可以用于执行本发明实施例所提供的用于非索引覆盖的数据查询方法,本发明实施例的用于非索引覆盖的数据查询方法也可以通过本发明实施例所提供的用于非索引覆盖的数据查询装置来执行。
本发明实施例提供了一种用于非索引覆盖的数据查询装置,该装置可以通过计算机设备实现其功能。
图3是根据本发明第一实施例的用于非索引覆盖的数据查询装置的示意图。如图3所示,该用于非索引覆盖的数据查询装置包括第一获取单元10、第二获取单元20和查询单元30。
第一获取单元10用于获取数据库表的非聚集索引的过滤条件。
数据库表可以是数据库中的数据表,非聚集索引也可以称为非聚簇索引。在对数据库表进行查询时,如果只有非聚集索引的过滤条件进行查询时,可以获取数据库表的非聚集索引的过滤条件。
例如,FactSession表在SessionTimeKey(时间列)上建立有聚集索引,在SessionKey上面建立有非聚集索引,非索引覆盖的非聚集索引查询代码如下:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
其中,非聚集索引的过滤条件为SessionKey>7342,获取该过滤条件,以便于对数据列进行查询。
第二获取单元20用于在确定通过非聚集索引对非索引覆盖的数据库表进行查询时,获取数据库表的聚集索引的聚簇键的值。
聚集索引也可以称为聚簇索引,当确定通过非聚集索引对非索引覆盖的数据库表进行查询时,即,在只有数据库表的非聚集索引作为过滤条件进行查询时,获取聚集索引的聚簇键的值。一般地,所有数据库的非聚集索引都会存储一个指针列,用于唯一标识这一行所在的物理存储位置,对于有聚集索引的,为聚簇键的值,对于无聚簇的堆表,为无序的RID即RowID。在数据库系统例如SQLServer里,数据库表存储方式分为两种,一种是没有聚簇索引的表,其存储方式是无序的堆存储;另一种是有聚簇索引的表,其存储方式是按聚簇索引所指定的键列,即聚簇键,进行顺序存储的,这里的聚簇键的值,可以是指的是数据库表里面每一行记录的聚簇键那些数据列的值。获取聚集索引的聚簇键的值,可以是获取多个聚簇键的值,也可以是获取所有聚簇键的值。当然,也可以是获取到满足上述非聚集索引的过滤条件的所有聚簇键的值的集合,并将满足过滤条件的所有聚簇键的值插入到临时表中,其中,聚簇键的值的集合,可以是满足过滤条件的那些记录行的聚簇键的值的集合。获取聚集索引的聚簇键的值,以便于将该聚簇键的值与非聚集索引的过滤条件一起作为查询条件对数据库表进行查询。
查询单元30用于将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询。
在获取到非聚集索引的过滤条件和聚集索引的聚簇键的值之后,可以将过滤条件和聚簇键的值作为查询条件,对数据库表进行查询。具体地,可以是先通过非聚集索引对相应的数据列进行查找,并找出满足非聚集索引的过滤条件的聚集索引的聚簇键的值,通过聚簇键的值查找出所有数据记录行,并选出包含的数据列和未包含的数据列,无需对整个数据库表的聚集索引进行扫描,有效地将非索引覆盖的查询所使用的聚集索引扫描操作转化为两次索引查找操作,解决了在数据量大时造成对数据库表的数据查询性能降低的问题,显著地降低了物理IO,达到了提升数据查询性能的效果。
优选地,本发明实施例的第二获取单元20包括查找模块和获取模块。
查找模块用于从非聚集索引中查找满足过滤条件的记录行。获取模块用于获取记录行对应的聚簇键的值。
由于聚集索引的聚簇键的值的逻辑顺序决定了相应的记录行的物理顺序,可以先通过非聚集索引的过滤条件查找出所有满足该过滤条件的记录行,然后获取这些记录行对应的聚簇键的值,将获取的记录行对应的聚簇键的值作为聚集索引的聚簇键的值。
根据本发明实施例,通过将非聚集索引中查找满足过滤条件的记录行,并获取记录行对应的聚簇键的值,从而可以进一步基于记录行对应的聚簇键的值进行聚集索引查询,进一步提高了数据查询的性能,提高了数据查询的速度。
优选地,本发明实施例的数据查询装置还包括去重单元和插入单元。
去重单元用于在获取记录行对应的聚簇键的值之后,对获取的记录行对应的聚簇键的值去重。
由于获取的聚簇键的值会存在重复,在获取到记录行对应的聚簇键的值之后,可以对聚簇键的值进行去重,从而保留聚簇键的唯一值,进一步提高数据查询的效率。
插入单元用于将去重后的聚簇键的值插入到临时表,将临时表和过滤条件作为查询条件。
将去重后的聚簇键的值插入到临时表中,以便于查找出临时表中的唯一的聚簇键的值的数据记录行。
例如:
SELECT SessionKey,BrowserKey FROM dbo.FactSession WHERE SessionKey>7342
上述非索引覆盖的非聚集索引查询代码可以转化为以下两部分实现,其中,第一部分为:
SELECT distinct SessionTimeKey INTO#tmp FROM dbo.FactSession WHERESessionKey>7342
从SessionKey这个非聚簇索引中查找出满足条件SessionKey>7342的所有记录行,并选取出这些记录行的所有对应的聚簇键SessionTimeKey的值的一个集合,再将此集合插入到临时表#tmp里。通过非聚集索引对相关列的查找,找出所有满足过滤条件的聚集键的值集合,并去重插入到临时表里。前提是所有数据库的非聚簇索引都会存储一个指针列,用于唯一标识这一行所在的物理存储位置,对于有聚簇索引的,为聚簇键的值,对于无聚簇的堆表,为无序的RID即RowID。
第二部分为:
SELECT SessionKey,BrowserKey
FROM dbo.FactSession
WHERE SessionKey>7342
AND SessionTimeKey IN(SELECT SessionTimeKey FROM#tmp)
从表FactSession的聚簇索引中查找出所有聚簇键的值存在于临时表#tmp里的数据记录行,并选取出SessionKey,BrowserKey列。在聚集索引里进行查询,其查询条件为第一部分中聚集键的集合加上非聚集索引的过滤条件。从而将非聚集索引的非索引覆盖查询转化为聚集索引查询,提升了数据查询的性能,提高了数据查询的速度。
图4是根据本发明第二实施例的用于非索引覆盖的数据查询装置的示意图。该实施例的数据查询装置可以作为上述实施例的数据查询装置的一种优选实施方式。如图4所示,该用于非索引覆盖的数据查询装置包括第一获取单元10、第二获取单元20和查询单元30,其中,数据查询装置还包括提取单元40、判断单元50和确定单元60。第一获取单元10、第二获取单元20和查询单元30与图3所示的第一获取单元10、第二获取单元20和查询单元30功能相同,这里不做赘述。
提取单元40用于提取数据库表的所有非聚集索引。
提取数据库表的所有非聚集索引可以是提取数据库表所处的数据库中的所有数据表的非聚集索引,当然,也可以是提取所有数据表的聚集索引。可以通过元数据查询,查询出此数据库表的有关的所有索引。具体地,可以是先提取SQL语句中的查询的条件列和选择列。例如,对将要执行的SQL语句进行提取,提取SQL语句中的条件列和选择列。在上述例子的SQL语句中,可得出查询的条件列为SessionKey,选择列为BrowserKey,相对应的索引分别为,聚簇索引:SessionTimeKey(自动包含所有列,聚簇索引为表的物理存储),非聚簇索引:SessionKey,无包含列。通过提取的查询的条件列(SessionKey)去查找所有索引中键列为此列的索引,这里找到了非聚簇索引SessionKey的键列。
判断单元50用于基于提取到的非聚集索引判断非聚集索引是否包含所有数据列。
在提取到数据库表的所有非聚集索引之后,可以判断数据库表的非聚集索引是否包含了所有数据列,如果包含了所有数据列则表明非聚集索引为索引覆盖,反之,则表明非聚集索引不是索引覆盖。当确定非聚集索引为索引覆盖时,无需进行转化;当确定非聚集索引不是索引覆盖,即非索引覆盖时,则可以获取聚集索引的聚簇键的值,以便于转化为聚集索引查询。
确定单元60用于当判断出非聚集索引不包含所有数据列,确定非聚集索引里非索引覆盖。
具体地,对上面的SessionKey的非聚簇索引,可以是判断其是否包含了查询里的包含列(SessionTimeKey),判断结果为未包含,从而确定为非索引覆盖。
根据本发明实施例,通过确定是否索引覆盖,在索引覆盖时,直接通过非聚集索引的过滤条件进行查询,如果未非索引覆盖时,则将数据查询转化为聚集索引查询,从而增加了数据查询的灵活性。
优选地,本发明实施例的数据查询装置还包括存储单元和第三获取单元。
存储单元用于在提取数据库中的所有非聚集索引之后,将提取到的非聚集索引存储到缓存。第三获取单元用于当再次确定通过非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
在提取数据库中的所有非聚集索引之后,可以将提取的数据库中的所有非聚集索引存储到缓存中,以便于在后续查询中无需进行索引的提取操作,可直接从缓存中获取非聚集索引,进行索引覆盖的判断,从而进一步地提高数据查询的效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、移动终端、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种用于非索引覆盖的数据查询方法,其特征在于,包括:
获取数据库表的非聚集索引的过滤条件;
在确定通过所述非聚集索引对非索引覆盖的所述数据库表进行查询时,获取所述数据库表的聚集索引的聚簇键的值;以及
将所述过滤条件和所述聚簇键的值作为查询条件在所述聚集索引里对所述数据库表进行查询,
其中,将过滤条件和聚簇键的值作为查询条件在聚集索引里对数据库表进行查询包括:通过所述非聚集索引对相应的数据列进行查找,并找出满足所述非聚集索引的过滤条件的聚集索引的聚簇键的值;通过所述聚簇键的值查找出所有数据记录行,并选出包含的数据列和未包含的数据列,
其中,非索引覆盖的查询所使用的聚集索引扫描操作转化为两次索引查找操作。
2.根据权利要求1所述的数据查询方法,其特征在于,获取聚集索引的聚簇键的值包括:
从非聚集索引中查找满足所述过滤条件的记录行;以及
获取所述记录行对应的聚簇键的值。
3.根据权利要求2所述的数据查询方法,其特征在于,在获取所述记录行对应的聚簇键的值之后,所述数据查询方法还包括:
对获取的所述记录行对应的聚簇键的值去重;以及
将去重后的聚簇键的值插入到临时表,将所述临时表和所述过滤条件作为所述查询条件。
4.根据权利要求1所述的数据查询方法,其特征在于,在确定通过所述非聚集索引对非索引覆盖的数据表进行查询之前,所述数据查询方法还包括:
提取数据库表的所有所述非聚集索引;
基于提取到的非聚集索引判断所述非聚集索引是否包含所有数据列;以及
如果判断出所述非聚集索引不包含所述所有数据列,则确定所述非聚集索引里非索引覆盖。
5.根据权利要求4所述的数据查询方法,其特征在于,在提取数据库中的所有所述非聚集索引之后,所述数据查询方法还包括:
将提取到的非聚集索引存储到缓存;以及
当再次确定通过所述非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
6.一种用于非索引覆盖的数据查询装置,其特征在于,包括:
第一获取单元,用于获取数据库表的非聚集索引的过滤条件;
第二获取单元,用于在确定通过所述非聚集索引对非索引覆盖的所述数据库表进行查询时,获取所述数据库表的聚集索引的聚簇键的值;以及
查询单元,用于将所述过滤条件和所述聚簇键的值作为查询条件在所述聚集索引里对所述数据库表进行查询,
其中,查询单元还用于通过所述非聚集索引对相应的数据列进行查找,并找出满足所述非聚集索引的过滤条件的聚集索引的聚簇键的值;所述查询单元还用于通过所述聚簇键的值查找出所有数据记录行,并选出包含的数据列和未包含的数据列,
其中,非索引覆盖的查询所使用的聚集索引扫描操作转化为两次索引查找操作。
7.根据权利要求6所述的数据查询装置,其特征在于,所述第二获取单元包括:
查找模块,用于从非聚集索引中查找满足所述过滤条件的记录行;以及
获取模块,用于获取所述记录行对应的聚簇键的值。
8.根据权利要求7所述的数据查询装置,其特征在于,所述数据查询装置还包括:
去重单元,用于在获取所述记录行对应的聚簇键的值之后,对获取的所述记录行对应的聚簇键的值去重;以及
插入单元,用于将去重后的聚簇键的值插入到临时表,将所述临时表和所述过滤条件作为所述查询条件。
9.根据权利要求6所述的数据查询装置,其特征在于,所述数据查询装置还包括:
提取单元,用于提取数据库表的所有所述非聚集索引;
判断单元,用于基于提取到的非聚集索引判断所述非聚集索引是否包含所有数据列;以及
确定单元,用于当判断出所述非聚集索引不包含所述所有数据列,确定所述非聚集索引里非索引覆盖。
10.根据权利要求9所述的数据查询装置,其特征在于,所述数据查询装置还包括:
存储单元,用于在提取数据库中的所有所述非聚集索引之后,将提取到的非聚集索引存储到缓存;以及
第三获取单元,用于当再次确定通过所述非聚集索引对非索引覆盖的数据库进行查询时,获取缓存中的非聚集索引。
CN201410086556.7A 2014-03-10 2014-03-10 用于非索引覆盖的数据查询方法和装置 Active CN103810300B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410086556.7A CN103810300B (zh) 2014-03-10 2014-03-10 用于非索引覆盖的数据查询方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410086556.7A CN103810300B (zh) 2014-03-10 2014-03-10 用于非索引覆盖的数据查询方法和装置

Publications (2)

Publication Number Publication Date
CN103810300A CN103810300A (zh) 2014-05-21
CN103810300B true CN103810300B (zh) 2017-08-01

Family

ID=50707070

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410086556.7A Active CN103810300B (zh) 2014-03-10 2014-03-10 用于非索引覆盖的数据查询方法和装置

Country Status (1)

Country Link
CN (1) CN103810300B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105574031B (zh) 2014-10-16 2019-01-04 国际商业机器公司 用于数据库索引的方法和系统
CN104408179B (zh) * 2014-12-15 2018-11-06 北京国双科技有限公司 数据表中数据处理方法和装置
CN104392001B (zh) * 2014-12-15 2017-11-14 北京国双科技有限公司 数据库查询方法和装置
CN107346317A (zh) * 2016-05-06 2017-11-14 北京神州泰岳软件股份有限公司 一种数据查询方法和装置
CN106649544A (zh) * 2016-10-27 2017-05-10 国家电网公司信息通信分公司 一种用电信息数据检索方法及装置
CN108268537B (zh) * 2016-12-30 2020-11-06 北京国双科技有限公司 数据过滤方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007077097A1 (en) * 2005-12-30 2007-07-12 International Business Machines Corporation System and method for managing a hierarchy of databases
CN101133388A (zh) * 2005-01-25 2008-02-27 谷歌公司 基于多索引的信息检索系统
CN102117305A (zh) * 2010-01-06 2011-07-06 中国移动通信集团公司 查询数据的系统、方法和数据管理系统
CN103348344A (zh) * 2010-12-30 2013-10-09 脸谱公司 图形数据的复合语句索引

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101133388A (zh) * 2005-01-25 2008-02-27 谷歌公司 基于多索引的信息检索系统
WO2007077097A1 (en) * 2005-12-30 2007-07-12 International Business Machines Corporation System and method for managing a hierarchy of databases
CN102117305A (zh) * 2010-01-06 2011-07-06 中国移动通信集团公司 查询数据的系统、方法和数据管理系统
CN103348344A (zh) * 2010-12-30 2013-10-09 脸谱公司 图形数据的复合语句索引

Also Published As

Publication number Publication date
CN103810300A (zh) 2014-05-21

Similar Documents

Publication Publication Date Title
CN103810300B (zh) 用于非索引覆盖的数据查询方法和装置
CN102339320B (zh) 恶意网页的识别方法以及识别装置
US8838608B2 (en) Virtual R-tree mapped to an extendible-hash based file system
CA2484009A1 (en) Managing expressions in a database system
US6389424B1 (en) Insertion method in a high-dimensional index structure for content-based image retrieval
CN104199892B (zh) 一种基于压缩合并异步更新的索引读写方法
CN106708841B (zh) 网站访问路径的聚合方法和装置
CN106557499A (zh) HBase二级索引创建方法和装置
CN104298736A (zh) 数据集合连接方法、装置及数据库系统
CN104391978A (zh) 用于浏览器的网页收藏处理方法及装置
CN106649363A (zh) 数据查询方法及装置
CN108241692A (zh) 数据的查询方法及装置
CN107147947B (zh) 关键帧识别方法及装置
CN104933153B (zh) 一种基于协作的固态盘存储系统性能提高方法
CN106611031A (zh) 数据查询方法及装置
CN108334549A (zh) 一种设备数据存储方法、提取方法、存储平台及提取平台
CN106933927A (zh) 数据表的连接方法和装置
CN106933919A (zh) 数据表的连接方法及装置
CN104298570B (zh) 数据处理方法和装置
CN110555219B (zh) 一种基于图像识别的三维cad模型相似性检索系统及方法
CN107273389A (zh) 庭审录像的查询方法和装置
CN106933934A (zh) 数据表的连接方法和装置
CN103870460B (zh) 一种靓号检索方法及系统
CN115617846A (zh) 基于大数据和区块链的信息筛选方法及系统
WO2014061846A1 (ko) 혼합 질의 처리를 위한 색인 생성 방법, 혼합 질의 처리 방법 및 색인 자료구조를 기록한 기록 매체

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
PE01 Entry into force of the registration of the contract for pledge of patent right

Denomination of invention: Method and device for inquiring non-index coverage data

Effective date of registration: 20190531

Granted publication date: 20170801

Pledgee: Shenzhen Black Horse World Investment Consulting Co.,Ltd.

Pledgor: BEIJING GRIDSUM TECHNOLOGY Co.,Ltd.

Registration number: 2019990000503

PE01 Entry into force of the registration of the contract for pledge of patent right
CP02 Change in the address of a patent holder

Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing

Patentee after: BEIJING GRIDSUM TECHNOLOGY Co.,Ltd.

Address before: 100086 Beijing city Haidian District Shuangyushu Area No. 76 Zhichun Road cuigongfandian 8 layer A

Patentee before: BEIJING GRIDSUM TECHNOLOGY Co.,Ltd.

CP02 Change in the address of a patent holder
PP01 Preservation of patent right

Effective date of registration: 20240604

Granted publication date: 20170801

PP01 Preservation of patent right