CN103678619B - 数据库索引处理方法和装置 - Google Patents

数据库索引处理方法和装置 Download PDF

Info

Publication number
CN103678619B
CN103678619B CN201310695909.9A CN201310695909A CN103678619B CN 103678619 B CN103678619 B CN 103678619B CN 201310695909 A CN201310695909 A CN 201310695909A CN 103678619 B CN103678619 B CN 103678619B
Authority
CN
China
Prior art keywords
index
database
serial
parallel
query
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
CN201310695909.9A
Other languages
English (en)
Other versions
CN103678619A (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 CN201310695909.9A priority Critical patent/CN103678619B/zh
Publication of CN103678619A publication Critical patent/CN103678619A/zh
Application granted granted Critical
Publication of CN103678619B publication Critical patent/CN103678619B/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
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • 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/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures

Landscapes

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

Abstract

本发明公开了一种数据库索引处理方法和装置。该数据库索引处理方法包括:获取数据库索引的串行IO查询语句,其中,索引存储在数据库的索引表中,串行IO查询语句用于在串行IO执行数据库索引的查询;将串行IO查询语句更改为并行IO查询语句,其中,并行IO查询语句用于在并行IO执行数据库索引的查询;以及基于并行IO查询语句在并行IO执行索引的查询。通过本发明,解决了相关技术中串行扫描索引时容易造成串行IO堵塞的问题。

Description

数据库索引处理方法和装置
技术领域
本发明涉及数据库索引领域,具体而言,涉及一种数据库索引处理方法和装置。
背景技术
目前,在相关技术中,通过数据库索引查询数据库数据时,由于结构化查询语言引擎(Structured Query Language Server,简称SQLserver)的智能化不强,因此SQLserver只能将由索引查询数据库数据的表扫描操作判断为非CPU(Central Processing Unit,中央处理器)密集型操作,从而只能生成索引的串行读写(Input/Output,简称IO)执行计划,该索引的串行IO执行计划用于串行扫描索引,与并行扫描索引相比,串行扫描索引的速度较低,并且串行扫描索引容易造成串行IO的堵塞。
针对相关技术中串行扫描索引时容易造成串行IO堵塞的问题,目前尚未提出有效的解决方案。
发明内容
本发明的主要目的在于提供一种数据库索引处理方法和装置,以解决相关技术中串行扫描索引时容易造成串行IO堵塞的问题。
为了实现上述目的,根据本发明的一个方面,提供了一种数据库索引处理方法。该数据库索引处理方法包括:获取数据库索引的串行IO查询语句,其中,索引存储在数据库的索引表中,串行IO查询语句用于在串行IO执行数据库索引的查询;将串行IO查询语句更改为并行IO查询语句,其中,并行IO查询语句用于在并行IO执行数据库索引的查询;以及基于并行IO查询语句在并行IO执行索引的查询。
进一步地,将串行IO查询语句更改为并行IO查询语句包括:获取预先创建的临时表,其中,临时表中包括预先设置的临时数据;获取索引表中的索引;由临时表中的临时数据和索引表中的索引运算得到中间数据;以及根据中间数据将串行IO查询语句更改为并行IO查询语句。
进一步地,由临时表中的临时数据和索引表中的索引运算得到中间数据包括:获取以临时数据为集合元素的第一集合;获取以索引为集合元素的第二集合;以及将第一集合和第二集合进行叉乘运算以得到笛卡尔集合,其中,笛卡尔集合中的元素为中间数据。
进一步地,获取预先创建的临时表包括:获取预先创建的具有单个行和单个列的临时表。
进一步地,索引包括具有第一列索引和第二列索引的聚簇索引,获取数据库索引的串行IO查询语句包括:获取数据库中聚簇索引的第一列索引的串行IO查询语句;和/或获取数据库中聚簇索引的第二列索引的串行IO查询语句。
为了实现上述目的,根据本发明的另一方面,提供了一种数据库索引处理装置。该数据库索引处理装置包括:获取单元,用于获取数据库索引的串行IO查询语句,其中,索引存储在数据库的索引表中,串行IO查询语句用于在串行IO执行数据库索引的查询;更改单元,用于将串行IO查询语句更改为并行IO查询语句,其中,并行IO查询语句用于在并行IO执行数据库索引的查询;以及查询单元,用于基于并行IO查询语句在并行IO执行索引的查询。
进一步地,更改单元包括:第一获取模块,用于获取预先创建的临时表,其中,临时表中包括预先设置的临时数据;第二获取模块,用于获取索引表中的索引;运算模块,用于由临时表中的临时数据和索引表中的索引运算得到中间数据;以及更改模块,用于根据中间数据将串行IO查询语句更改为并行IO查询语句。
进一步地,运算模块包括:第一获取子模块,用于获取以临时数据为集合元素的第一集合;第二获取子模块,用于获取以索引为集合元素的第二集合;以及叉乘子模块,用于将第一集合和第二集合进行叉乘运算以得到笛卡尔集合,其中,笛卡尔集合中的元素为中间数据。
进一步地,第一获取模块还用于获取预先创建的具有单个行和单个列的临时表。
进一步地,索引包括具有第一列索引和第二列索引的聚簇索引,获取单元包括:第三获取模块,用于获取数据库中聚簇索引的第一列索引的串行IO查询语句;和/或第四获取模块,用于获取数据库中聚簇索引的第二列索引的串行IO查询语句。
通过本发明,采用获取数据库索引的串行IO查询语句,其中,索引存储在数据库的索引表中,串行IO查询语句用于在串行IO执行数据库索引的查询;以及将串行IO查询语句更改为并行IO查询语句,其中,并行IO查询语句用于在并行IO执行数据库索引的查询;以及基于并行IO查询语句在并行IO执行索引的查询,解决了相关技术中串行扫描索引时容易造成串行IO堵塞的问题,进而达到了快速扫描数据库索引的效果。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明第一实施例的数据库索引处理方法的流程图;
图2是根据本发明第二实施例的数据库索引处理方法的流程图;
图3是根据本发明第一实施例的数据库索引处理装置的结构示意图;以及
图4是根据本发明第二实施例的数据库索引处理装置的结构示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
为了使本领域的技术人员更好的理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,在本领域普通技术人员没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明的保护范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含。
需要说明的是,CPU密集型操作是指需要消耗较多的CPU的计算机操作,并且CPU密集型操作生成的IO查询语句为并行IO查询语句;非CPU密集型操作是指需要消耗较少的CPU的计算机操作,并且非CPU密集型操作生成的IO查询语句为串行IO查询语句。
根据本发明的实施例,提供了一种数据库索引处理方法,该数据库索引处理方法用于将数据库索引的串行IO查询语句更改为并行IO查询语句。该数据库索引处理方法可以运行在计算机处理设备上。
图1是根据本发明第一实施例的数据库索引处理方法的流程图。
如图1所示,该方法包括如下的步骤S101至步骤S103:
步骤S101,获取数据库索引的串行IO查询语句。
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如,雇员(employee)表的姓名(name)列。如果要按姓查找特定职员,与必须搜索数据库表中的所有行相比,索引可以帮助用户更快地获得该信息。索引包括唯一索引、主键索引和聚簇索引。使用索引查询数据库表包括索引查询(IndexSeek)和全索引扫描(IndexScan),其中,IndexSeek仅从索引里取出相关的行进行查询。
数据库索引存储在数据库的索引表中。串行IO查询语句用于在串行IO执行数据库索引的查询。需要说明的是,在执行索引查询指令时,由于索引查询指令为表扫描的查询指令,而表扫描的查询指令消耗较少的CPU,因此CPU将该操作判断为非CPU密集型操作,进而生成串行IO查询语句。
进一步地,索引可以包括具有第一列索引和第二列索引的聚簇索引,这样,可以通过以下方式获取数据库索引的串行IO查询语句:
方式1,获取数据库中聚簇索引的第一列索引的串行IO查询语句,并且获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以将数据库索引的第一列索引和第二列索引均由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
方式2,获取数据库中聚簇索引的第一列索引的串行IO查询语句,或者获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以仅仅将部分数据库索引由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将部分串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
例如,SELECT SessionKey FROM dbo.FactSession,即为从FactSession聚簇索引中获取SessionKey列索引。
步骤S102,将串行IO查询语句更改为并行IO查询语句。
并行IO查询语句用于在并行IO执行数据库索引的查询。需要说明的是,在本发明实施例中,将串行IO查询语句更改为并行IO查询语句可以通过将索引查询的非CPU密集型操作(即表扫描操作)转化为CPU密集型操作(如聚合类操作和表连接操作等),这样,CPU密集型操作可以触发CPU生成并行IO查询语句。
例如,索引查询的表扫描操作转化后得到表连接操作,CPU可以判断该表连接操作为消耗CPU较多的CPU密集型操作,进而该表连接操作可以触发CPU生成并行IO查询语句。
步骤S103,基于并行IO查询语句在并行IO执行索引的查询。
这样,并行IO查询语句可以快速扫描数据库索引,从而提高了数据库索引的扫描效率,并且减轻了数据库索引在扫描时造成的IO的堵塞。
图2是根据本发明第二实施例的数据库索引处理方法的流程图。
如图2所示,该数据库索引处理方法包括如下的步骤S201至步骤S206,该实施例可以作为图1所示实施例的优选实施方式。
步骤S201,获取数据库索引的串行IO查询语句。使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如,雇员(employee)表的姓名(name)列。如果要按姓查找特定职员,与必须搜索数据库表中的所有行相比,索引可以帮助用户更快地获得该信息。索引包括唯一索引、主键索引和聚簇索引。使用索引查询数据库表包括索引查询(IndexSeek)和全索引扫描(IndexScan),其中,IndexSeek仅从索引里取出相关的行进行查询。
数据库索引存储在数据库的索引表中。串行IO查询语句用于在串行IO执行数据库索引的查询。需要说明的是,在执行索引查询指令时,由于索引查询指令为表扫描的查询指令,而表扫描的查询指令消耗较少的CPU,因此CPU将该操作判断为非CPU密集型操作,进而生成串行IO查询语句。
进一步地,索引可以包括具有第一列索引和第二列索引的聚簇索引,这样,可以通过以下方式获取数据库索引的串行IO查询语句:
方式1,获取数据库中聚簇索引的第一列索引的串行IO查询语句,并且获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以将数据库索引的第一列索引和第二列索引均由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
方式2,获取数据库中聚簇索引的第一列索引的串行IO查询语句,或者获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以仅仅将部分数据库索引由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将部分串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
例如,SELECT SessionKey FROM dbo.FactSession,即为从FactSession聚簇索引中获取SessionKey列索引。
在本发明实施例中,优选地,可以通过步骤S202至S205将串行IO查询语句更改为并行IO查询语句:
步骤S202,获取预先创建的临时表。
在本发明实施例中,临时表中可以包括预先设置的临时数据,其中,临时表中的临时数据可以为任意的阿拉伯数字,或者临时表中的临时数据可以为任意列名,或者临时表中的临时数据可以为任意的英文字母等,并且临时表中的所有的临时数据可以相同或者相异,例如,临时表中的临时数据可以全部为1。
需要说明的是,预先创建的临时表的列数和行数可以为任意的,但是临时表的列数和行数越多,经过运算之后得到的数据占用的内存空间更大,即临时表的列数和行数越多,经过运算之后得到的数据消耗更多的内存,而临时表的列数和行数越少,经过运算之后得到的数据占用的内存空间更小,即临时表的列数和行数越少,经过运算之后得到的数据消耗更少的内存。因此,优选地,获取预先创建的临时表可以包括获取预先创建的具有单个行和单个列的临时表。
步骤S203,获取索引表中的索引。
在本发明实施例中,获取索引表中的索引可以是获取索引表中的全部索引,或者可以是获取索引表中聚簇索引的某几列索引。
步骤S204,由临时表中的临时数据和索引表中的索引运算得到中间数据。
具体地,在本发明实施例中,由临时表中的临时数据和索引表中的索引运算得到中间数据可以包括:
步骤1,获取以临时数据为集合元素的第一集合。
例如,当临时表为一个具有一行、两列的临时表,并且该临时表的第一行第一列的临时数据为A,该临时表的第一行第二列的临时数据为B时,则上述临时数据组成的第一集合可以表示为TMP1={A,B},优选地,TMP2={A}。
步骤2,获取以索引为集合元素的第二集合。
例如,以数据库索引表中的索引集合元素的第二集合可以表示为Index={Index1,Index2,Index3,Index4}。
步骤3,将第一集合和第二集合进行叉乘运算以得到笛卡尔集合。
例如,TMP1×Index={(A,Index1),(A,Index2),(A,Index3),(A,Index4),(B,Index1),(B,Index2),(B,Index3),(B,Index4)}。在本发明实施例中,笛卡尔集合中的元素为中间数据,其中,该中间数据包含了数据库索引的全部信息,即通过该中间数据可以进行数据库索引的查询。
优选地,TMP2×Index={(A,Index1),(A,Index2),(A,Index3),(A,Index4)}。与TMP1×Index相比较,该TMP2×Index不仅包含了全部的数据库索引,而且该TMP2×Index可以节约一倍的数据库存储空间。
步骤S205,根据中间数据将串行IO查询语句更改为并行IO查询语句。
由于TMP1×Index和该TMP2×Index的运算需要消耗较多的CPU,因此CPU判断出上述操作为CPU密集型操作,这样,上述操作可以触发CPU生成并行IO查询语句,进而达到提高索引的查询效率、加快索引的扫描速度的效果。
步骤S206,同图1所示实施例的步骤S103,在此不再赘述。
例如,SELECT SessionKey FROM dbo.FactSession,#tmp1,该程序用于将存放数据库索引的FactSession表和预先设定的临时表tmp1进行表连接操作,并且表连接操作得到的结果中选择SessionKey列索引进行索引的查询。
从以上的描述中,可以看出,本发明实现了将查询数据库索引表中的索引这一非CPU密集型操作转化为CPU密集型操作,例如,对数据库索引表中的索引和预先设定的临时表中的临时数据进行笛卡尔运算,从而触发了CPU生成并行IO查询语句,避免了生成并执行串行IO查询语句时数据库索引会卡在IO上并造成IO的堵塞的问题,进而达到了提高数据库索引的扫描效率、加快数据库索引的读写速度的效果。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本发明的实施例,提供了一种数据库索引处理装置,该数据库索引处理装置用于将数据库索引的串行IO查询语句更改为并行IO查询语句。需要说明的是,本发明实施例所提供的数据库索引处理装置可以用于执行本发明实施例的数据库索引处理方法,本发明实施例的数据库索引处理方法也可以通过本发明实施例的数据库索引处理装置来执行。
图3是根据本发明第一实施例的数据库索引处理装置的结构示意图。
如图3所示,该装置包括:获取单元10、更改单元20、查询单元30。
获取单元10用于获取数据库索引的串行IO查询语句。
使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如,雇员(employee)表的姓名(name)列。如果要按姓查找特定职员,与必须搜索数据库表中的所有行相比,索引可以帮助用户更快地获得该信息。索引包括唯一索引、主键索引和聚簇索引。使用索引查询数据库表包括索引查询(IndexSeek)和全索引扫描(IndexScan),其中,IndexSeek仅从索引里取出相关的行进行查询。
数据库索引存储在数据库的索引表中。串行IO查询语句用于在串行IO执行数据库索引的查询。需要说明的是,在执行索引查询指令时,由于索引查询指令为表扫描的查询指令,而表扫描的查询指令消耗较少的CPU,因此CPU将该操作判断为非CPU密集型操作,进而生成串行IO查询语句。
更改单元20用于将串行IO查询语句更改为并行IO查询语句。
并行IO查询语句用于在并行IO执行数据库索引的查询。需要说明的是,在本发明实施例中,将串行IO查询语句更改为并行IO查询语句可以通过将索引查询的非CPU密集型操作(即表扫描操作)转化为CPU密集型操作(如聚合类操作和表连接操作等),这样,CPU密集型操作可以触发CPU生成并行IO查询语句。
例如,索引查询的表扫描操作转化后得到表连接操作,CPU可以判断该表连接操作为消耗CPU较多的CPU密集型操作,进而该表连接操作可以触发CPU生成并行IO查询语句。
查询单元30用于基于并行IO查询语句在并行IO执行索引的查询。
这样,并行IO查询语句可以快速扫描数据库索引,从而提高了数据库索引的扫描效率,并且减轻了数据库索引在扫描时造成的IO的堵塞。
图4是根据本发明第二实施例的数据库索引处理装置的结构示意图。
如图4所示,该实施例可以作为图3所示实施例的优选实施方式,该实施例的数据库索引处理装置包括第一实施例的获取单元10、更改单元20和查询单元30,其中,更改单元20包括第一获取模块201和第二获取模块202、运算模块203和更改模块204。
查询单元30的作用与第一实施例中的相同,在此不再赘述。
获取单元10还用于获取数据库索引的串行IO查询语句,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如,雇员(employee)表的姓名(name)列。如果要按姓查找特定职员,与必须搜索数据库表中的所有行相比,索引可以帮助用户更快地获得该信息。索引包括唯一索引、主键索引和聚簇索引。使用索引查询数据库表包括索引查询(IndexSeek)和全索引扫描(IndexScan),其中,IndexSeek仅从索引里取出相关的行进行查询。
数据库索引存储在数据库的索引表中。串行IO查询语句用于在串行IO执行数据库索引的查询。需要说明的是,在执行索引查询指令时,由于索引查询指令为表扫描的查询指令,而表扫描的查询指令消耗较少的CPU,因此CPU将该操作判断为非CPU密集型操作,进而生成串行IO查询语句。
第一获取模块201用于获取预先创建的临时表。
在本发明实施例中,临时表中可以包括预先设置的临时数据,其中,临时表中的临时数据可以为任意的阿拉伯数字,或者临时表中的临时数据可以为任意列名,或者临时表中的临时数据可以为任意的英文字母等,并且临时表中的所有的临时数据可以相同或者相异,例如,临时表中的临时数据可以全部为1。
需要说明的是,预先创建的临时表的列数和行数可以为任意的,但是临时表的列数和行数越多,经过运算之后得到的数据占用的内存空间更大,即临时表的列数和行数越多,经过运算之后得到的数据消耗更多的内存,而临时表的列数和行数越少,经过运算之后得到的数据占用的内存空间更小,即临时表的列数和行数越少,经过运算之后得到的数据消耗更少的内存。因此,优选地,获取预先创建的临时表可以包括获取预先创建的具有单个行和单个列的临时表。
第二获取模块202用于获取索引表中的索引。
在本发明实施例中,获取索引表中的索引可以是获取索引表中的全部索引,或者可以是获取索引表中聚簇索引的某几列索引。
运算模块203用于由临时表中的临时数据和索引表中的索引运算得到中间数据。
进一步地,索引可以包括具有第一列索引和第二列索引的聚簇索引,这样,获取单元10可以包括第三获取模块和第四获取模块,并且可以通过以下方式获取数据库索引的串行IO查询语句:
方式1,第三获取模块获取数据库中聚簇索引的第一列索引的串行IO查询语句,并且第四获取模块获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以将数据库索引的第一列索引和第二列索引均由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
方式2,第三获取模块获取数据库中聚簇索引的第一列索引的串行IO查询语句,或者第四获取模块获取数据库中聚簇索引的第二列索引的串行IO查询语句。这样,可以仅仅将部分数据库索引由串行IO查询语句改写为并行IO查询语句,由于并行IO查询可以降低索引查询消耗的时间,因此,将部分串行IO查询语句改写为并行IO查询语句可以提高索引查询的速度,进而可以减轻查询索引时造成的串行IO的堵塞。
例如,SELECT SessionKey FROM dbo.FactSession,即为从FactSession聚簇索引中获取SessionKey列索引。
具体地,在本发明实施例中,运算模块可以包括:第一获取子模块、第二获取子模块和叉乘子模块。
第一获取子模块用于获取以临时数据为集合元素的第一集合。
例如,当临时表为一个具有一行、两列的临时表,并且该临时表的第一行第一列的临时数据为A,该临时表的第一行第二列的临时数据为B时,则上述临时数据组成的第一集合可以表示为TMP1={A,B},优选地,TMP2={A}。
第二获取子模块用于获取以索引为集合元素的第二集合。
例如,以数据库索引表中的索引集合元素的第二集合可以表示为Index={Index1,Index2,Index3,Index4}。
叉乘子模块用于将第一集合和第二集合进行叉乘运算以得到笛卡尔集合。
例如,TMP1×Index={(A,Index1),(A,Index2),(A,Index3),(A,Index4),(B,Index1),(B,Index2),(B,Index3),(B,Index4)}。在本发明实施例中,笛卡尔集合中的元素为中间数据,其中,该中间数据包含了数据库索引的全部信息,即通过该中间数据可以进行数据库索引的查询。
优选地,TMP2×Index={(A,Index1),(A,Index2),(A,Index3),(A,Index4)}。与TMP1×Index相比较,该TMP2×Index不仅包含了全部的数据库索引,而且该TMP2×Index可以节约一倍的数据库存储空间。
更改模块204用于根据中间数据将串行IO查询语句更改为并行IO查询语句。
由于TMP1×Index和该TMP2×Index的运算需要消耗较多的CPU,因此CPU判断出上述操作为CPU密集型操作,这样,上述操作可以触发CPU生成并行IO查询语句,进而达到提高索引的查询效率、加快索引的扫描速度的效果。
例如,SELECT SessionKey FROM dbo.FactSession,#tmp1,该程序用于将存放数据库索引的FactSession表和预先设定的临时表tmp1进行表连接操作,并且表连接操作得到的结果中选择SessionKey列索引进行索引的查询。
从以上的描述中,可以看出,本发明实现了将查询数据库索引表中的索引这一非CPU密集型操作转化为CPU密集型操作,例如,对数据库索引表中的索引和预先设定的临时表中的临时数据进行笛卡尔运算,从而触发了CPU生成并行IO查询语句,避免了生成并执行串行IO查询语句时数据库索引会卡在IO上并造成IO的堵塞的问题,进而达到了提高数据库索引的扫描效率、加快数据库索引的读写速度的效果。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种数据库索引处理方法,其特征在于,包括:
获取数据库索引的串行IO查询语句,其中,所述索引存储在所述数据库的索引表中,所述串行IO查询语句用于在串行IO执行所述数据库索引的查询;
将所述串行IO查询语句更改为并行IO查询语句,其中,所述并行IO查询语句用于在并行IO执行所述数据库索引的查询;以及
基于所述并行IO查询语句在并行IO执行索引的查询;
其中,将所述串行IO查询语句更改为并行IO查询语句包括:
获取预先创建的临时表,其中,所述临时表中包括预先设置的临时数据;
获取所述索引表中的索引;
由所述临时表中的临时数据和所述索引表中的索引运算得到中间数据;以及
根据所述中间数据将所述串行IO查询语句更改为并行IO查询语句。
2.根据权利要求1所述的数据库索引处理方法,其特征在于,由所述临时表中的临时数据和所述索引表中的索引运算得到中间数据包括:
获取以所述临时数据为集合元素的第一集合;
获取以所述索引为集合元素的第二集合;以及
将所述第一集合和所述第二集合进行叉乘运算以得到笛卡尔集合,
其中,所述笛卡尔集合中的元素为所述中间数据。
3.根据权利要求1所述的数据库索引处理方法,其特征在于,获取预先创建的临时表包括:获取预先创建的具有单个行和单个列的临时表。
4.根据权利要求1所述的数据库索引处理方法,其特征在于,所述索引包括具有第一列索引和第二列索引的聚簇索引,获取数据库索引的串行IO查询语句包括:
获取所述数据库中所述聚簇索引的第一列索引的串行IO查询语句;和/或
获取所述数据库中所述聚簇索引的第二列索引的串行IO查询语句。
5.一种数据库索引处理装置,其特征在于,包括:
获取单元,用于获取数据库索引的串行IO查询语句,其中,所述索引存储在所述数据库的索引表中,所述串行IO查询语句用于在串行IO执行所述数据库索引的查询;
更改单元,用于将所述串行IO查询语句更改为并行IO查询语句,其中,所述并行IO查询语句用于在并行IO执行所述数据库索引的查询;以及
查询单元,用于基于所述并行IO查询语句在并行IO执行索引的查询;
其中,所述更改单元包括:
第一获取模块,用于获取预先创建的临时表,其中,所述临时表中包括预先设置的临时数据;
第二获取模块,用于获取所述索引表中的索引;
运算模块,用于由所述临时表中的临时数据和所述索引表中的索引运算得到中间数据;以及
更改模块,用于根据所述中间数据将所述串行IO查询语句更改为并行IO查询语句。
6.根据权利要求5所述的数据库索引处理装置,其特征在于,所述运算模块包括:
第一获取子模块,用于获取以所述临时数据为集合元素的第一集合;
第二获取子模块,用于获取以所述索引为集合元素的第二集合;以及
叉乘子模块,用于将所述第一集合和所述第二集合进行叉乘运算以得到笛卡尔集合,
其中,所述笛卡尔集合中的元素为所述中间数据。
7.根据权利要求5所述的数据库索引处理装置,其特征在于,所述第一获取模块还用于获取预先创建的具有单个行和单个列的临时表。
8.根据权利要求5所述的数据库索引处理装置,其特征在于,所述索引包括具有第一列索引和第二列索引的聚簇索引,所述获取单元包括:
第三获取模块,用于获取所述数据库中所述聚簇索引的第一列索引的串行IO查询语句;和/或
第四获取模块,用于获取所述数据库中所述聚簇索引的第二列索引的串行IO查询语句。
CN201310695909.9A 2013-12-17 2013-12-17 数据库索引处理方法和装置 Active CN103678619B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310695909.9A CN103678619B (zh) 2013-12-17 2013-12-17 数据库索引处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310695909.9A CN103678619B (zh) 2013-12-17 2013-12-17 数据库索引处理方法和装置

Publications (2)

Publication Number Publication Date
CN103678619A CN103678619A (zh) 2014-03-26
CN103678619B true CN103678619B (zh) 2017-06-30

Family

ID=50316164

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310695909.9A Active CN103678619B (zh) 2013-12-17 2013-12-17 数据库索引处理方法和装置

Country Status (1)

Country Link
CN (1) CN103678619B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105701098B (zh) 2014-11-25 2019-07-09 国际商业机器公司 针对数据库中的表生成索引的方法和装置
US20180173753A1 (en) * 2016-12-16 2018-06-21 Futurewei Technologies, Inc. Database system and method for compiling serial and parallel database query execution plans
CN108427688B (zh) * 2017-02-15 2022-01-28 北京国双科技有限公司 数据查询方法和装置
CN108897776A (zh) * 2018-06-01 2018-11-27 郑州云海信息技术有限公司 一种数据信息的运算处理方法、装置及计算机存储介质
CN111078734B (zh) * 2019-12-25 2023-08-08 天津南大通用数据技术股份有限公司 一种通过创建内部临时表索引提高start with查询性能的方法
CN114398378B (zh) * 2022-03-25 2022-11-01 北京奥星贝斯科技有限公司 确定索引代价的方法和装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102323946A (zh) * 2011-09-05 2012-01-18 天津神舟通用数据技术有限公司 并行数据库中算子复用的实现方法
CN103324466A (zh) * 2013-05-24 2013-09-25 浪潮电子信息产业股份有限公司 一种数据相关性序列化io的并行处理方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7657567B2 (en) * 2006-12-18 2010-02-02 Teradata Us, Inc. Method and system for rewriting a database query

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102323946A (zh) * 2011-09-05 2012-01-18 天津神舟通用数据技术有限公司 并行数据库中算子复用的实现方法
CN103324466A (zh) * 2013-05-24 2013-09-25 浪潮电子信息产业股份有限公司 一种数据相关性序列化io的并行处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
《SQL查询思路优化与语句优化》;林丽贞;《科教文汇(下旬刊)》;20120531;全文 *

Also Published As

Publication number Publication date
CN103678619A (zh) 2014-03-26

Similar Documents

Publication Publication Date Title
CN103678619B (zh) 数据库索引处理方法和装置
CN110633292A (zh) 一种异构数据库的查询方法、装置、介质、设备及系统
CN104750690B (zh) 一种查询处理方法、装置及系统
US9141666B2 (en) Incremental maintenance of range-partitioned statistics for query optimization
EP2631815A1 (en) Method and device for ordering search results, method and device for providing information
CN104573022A (zh) 一种HBase的数据查询方法及装置
CN106528898A (zh) 将非关系型数据库数据转换到关系型数据库的方法及装置
CN109977175B (zh) 数据配置查询方法和装置
CN107436911A (zh) 模糊查询方法、装置及查询系统
CN107122222A (zh) 一种字符串的搜索系统及方法
CN104750727A (zh) 一种列式内存存储查询装置及列式内存存储查询方法
CN101055566B (zh) 一种电子数据表的函数收集方法和装置
Liroz-Gistau et al. Dynamic workload-based partitioning for large-scale databases
CN109740124A (zh) 文档比较的差异输出方法、装置、存储介质及电子设备
CN105359142A (zh) 哈希连接方法、装置和数据库管理系统
CN106933824A (zh) 在多个文档中确定与目标文档相似的文档集合的方法和装置
CN107402942B (zh) 索引方法及装置
CN109992630B (zh) 数据模型匹配方法和装置
CN105740997A (zh) 一种控制任务流程的方法、装置及数据库管理系统
CN107562872A (zh) 基于sql的度量空间数据相似度查询方法及装置
Rybina et al. On a common approach to joining productive rules obtained from different knowledge sources
Jiang Analysis and Discussion of Radar Construction Problems with Greedy Algorithm
CN107301239A (zh) 一种数据库转换器及转换方法
CN105912404A (zh) 一种基于磁盘的大规模图数据中寻找强连通分量的方法
CN110162456A (zh) 一种dubbo服务的测试方法、装置、存储介质和服务器

Legal Events

Date Code Title Description
PB01 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: Database index processing method and device

Effective date of registration: 20190531

Granted publication date: 20170630

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

Pledgor: Beijing Guoshuang 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 Guoshuang Technology Co.,Ltd.

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

Patentee before: Beijing Guoshuang Technology Co.,Ltd.

CP02 Change in the address of a patent holder