CN103425672B - 一种数据库索引的建立方法及装置 - Google Patents

一种数据库索引的建立方法及装置 Download PDF

Info

Publication number
CN103425672B
CN103425672B CN201210154256.9A CN201210154256A CN103425672B CN 103425672 B CN103425672 B CN 103425672B CN 201210154256 A CN201210154256 A CN 201210154256A CN 103425672 B CN103425672 B CN 103425672B
Authority
CN
China
Prior art keywords
index
node
child node
multiway tree
logical operator
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.)
Expired - Fee Related
Application number
CN201210154256.9A
Other languages
English (en)
Other versions
CN103425672A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201210154256.9A priority Critical patent/CN103425672B/zh
Publication of CN103425672A publication Critical patent/CN103425672A/zh
Priority to HK14101784.2A priority patent/HK1189063A1/zh
Application granted granted Critical
Publication of CN103425672B publication Critical patent/CN103425672B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种数据库索引的建立方法及装置,若查询语句中包含表示或关系的逻辑运算符,则执行以下操作来建立索引:确定查询语句中表示或关系的逻辑运算符,将所述表示或关系的逻辑运算符作为多叉树的根节点、每个表示或关系的逻辑运算符之前和之后的子查询条件作为多叉树的子节点,将所述查询语句中的查询条件转换为多叉树形式,并依据转换后的多叉树中各子节点中的子查询条件分别建立索引,解决了现有技术中存在的查询条件较为复杂时,计算机无法识别表示或关系的逻辑运算符,从而导致自动建立的索引有误,以及采用人工辅助方式建立索引时索引建立效率低的问题。

Description

一种数据库索引的建立方法及装置
技术领域
本申请涉及信息检索技术领域,尤其涉及一种数据库索引的建立方法及装置。
背景技术
在对数据库中的数据库表进行数据字段的查询时,大多采用正表遍历的方式对数据库表中的所有字段进行查询,在此方式下,虽然可以得到相应的数据字段信息,但由于各数据库表均包含大量的数据字段,因此很容易导致数据查询速率过低以及数据库负载过高、数据库性能降低等问题。为了避免上述问题,目前常采用预先为数据库表建立数据库索引,并从建立的数据库索引中查找与当前查询条件相关的数据库索引,再利用所述查找到的数据库索引查找与所述查询条件相应的数据字段信息的方式,在大量的数据库数据中找到对应的数据字段信息,由于数据库索引是对数据库中一列或多列的值进行排序的一种结构,因此,在利用与当前查询条件相关的数据库索引对数据库表中的大量数据进行查询时,能够快速定位到当前查询条件所对应的数据字段信息,提高数据查询的效率。
目前常见的数据库索引的建立方法为:
根据为数据库表预先配置的查询条件,提取出所述查询条件中涉及到的表示数据库表中数据字段的共同属性的索引字段,并建立该索引字段与数据库表中具有该索引字段所表示的共同属性的数据字段之间的索引关系。由于在实际的数据库表创建时,数据库表中具有某一共同属性的数据字段常以列的形式来表示,因此,数据库表中的列所表示的数据的共同属性(列的名称)即为表示数据库表中数据字段的共同属性的索引字段。同时,上述建立索引关系的过程也可称之为在数据库表的列上建立以该列的名称为索引列的索引。
假设所建立的数据库表的内容为:姓名列包含张三、张三、李四三个数据字段;年龄列包含19、19、18三个数据字段;国籍列包含中国、美国、中国三个数据字段;身份证号码列包含10010、20010、30010三个数据字段。
若为该数据库表预先配置的查询条件为查找姓名为“张三”的数据字段时,则可以将所述查询条件中涉及到的索引字段“姓名”提取出来,并建立该索引字段与数据库表中具有该“姓名”索引字段所表示的共同属性的数据字段“张三”、“张三”、“李四”之间的索引关系,也就是说,在数据库表的姓名列上建立以该“姓名”索引字段为索引列的索引。
在现有的数据库索引的建立过程中,一般通过包含where子句的结构化查询语言(SQL,StructuredQueryLanguage)查询语句来反映查询条件,下面根据以SQL查询语句来为数据库表建立索引为例,对常用的数据库索引的建立方法进行详细说明:
假设在数据库中已创建了名为testTable(测试表)的数据库表;在创建该testTable数据库表时,以列的形式来表示该数据库表中具有某一共同属性的数据字段,同时,以行的形式来表示需要同时输入数据库表中的具有不同列值的数据字段组,且对于数据库表的每一列来说,其所包含的数据字段分别对应不同的行。
所述testTable数据库表如下所示:
CreateTabletestTable(//创建一个名为testTable的数据库表
namechar(10)notnull,//name(名称)列中包含10个不为空的字符型数据字段
ageint(10)notnull,//age(年龄)列中包含10个不为空的整数数据字段
identityint(10)notnull,//identity(身份号码)列中包含10个不为空的整数数据字段
nationalitychar(10)notnull,//nationality(国籍)列中包含10个不为空的字符型数据字段
sexchar(10)notnull,//sex(性别)列中包含10个不为空的字符型数据字段
heightint(10)notnull,//height(身高)列中包含10个不为空的整数数据字段
weightint(10)notnull,//weight(体重)列中包含10个不为空的整数数据字段
educationlevelchar(10)notnull,//educationlevel(教育水平)列中包含10个不为空的字符型数据字段
primarykey(identity)//定义identity为主键,主键中的各值能够唯一标识数据库表中的每一行
)
若SQL查询语句所反映的查询条件为从testTable数据库表中查找name为“张三”的数据字段,相应的SQL查询语句的表现形式为:select*fromtestTablewherename=‘张三’,其中“name=‘张三’”为该SQL查询语句中的查询条件,那么可以根据所述SQL查询语句在该testTable数据库表的“name”列上建立索引,具体地,将与所述SQL查询语句中的查询条件相关的数据字段的共同属性“name”提取出来,通过拼接或重复等操作,为testTable数据库表建立一个以该“name”为索引列的索引,该索引内容为:“name”与testTable数据库表的“name”列中包含的10个不为空的整数数据字段之间的索引关系。该索引建立过程所使用的SQL语句为:CreateindextestTable_nameONtestTable(name)。
在该testTable数据库表的“name”列上建立索引后,若当前testTable数据库表再次获得查询条件为从该testTable数据库表中查找name为“李四”的数据字段时,就可以利用该已建立的以“name”为索引列的索引,在无需对testTable数据表进行正表遍历的情况下,根据“name”与在testTable数据库表的“name”列中包含的10个不为空的整数数据字段之间的索引关系,快速定位到数据库表中的“name”列,并在该“name”列中定位到相应的数据字段“李四”。
以上建立索引的过程是针对查询条件较为单一、简单的情形,当查询条件较为复杂时,其建立索引的原理与上述建立索引的原理相似,但实际建立过程相对复杂,例如:
若SQL查询语句所反映的查询条件为从testTable数据库表中查找name为“张三”且age为“19”且nationality为“中国”的数据字段,其SQL查询语句的表现形式为:select*fromtestTablewherename=‘张三’andage=‘19’andnationality=‘中国’,即只包含and等表示“与”关系的逻辑关系时,可以将该SQL查询语句所反映的查询条件中涉及到的“name”、“age”以及“nationality”等索引字段提取出来,通过拼接或重复等操作,共同作为索引的列来为testTable数据库表建立一个多重索引,该多重索引的内容为:“name”、“age”以及“nationality”索引字段与testTable数据库表中的10组同时包含来自“name”列、“age”列以及“nationality”列的三个数据字段的数据字段组之间的索引关系。
该多重索引建立过程所对应的SQL语句为:CreateindextestTable_name_age_nationalityONtestTable(name,age,nationality)。
在该testTable数据库表的“name”列、“age”列以及“nationality”列上建立多重索引后,若当前testTable数据库表再次接收到的查询条件为从该testTable数据库表中查找name为“李四”、age为“18”且nationality为“中国”的数据字段时,就可以利用该已建立的以“name”、“age”以及“nationality”为索引列的多重索引,在无需对该数据表进行正表遍历的情况下,结合查询条件,在数据库表中直接定位到相应的name为“李四”的数据字段所在的行,进而在已定位的name为“李四”的数据字段所在行的基础上定位到age为“18”的数据字段所在的行,最后在已定位的name为“李四”且age为“18”的数据字段所在行的基础上定位到nationality为“中国”的数据字段所在的行,最终得到需要的数据字段,此种情况下,所得到的数据字段实际上为包含多个数据字段的数据字段组。
以上建立索引的过程是针对SQL查询语句所反映的查询条件中只包含and等表示“与”关系的逻辑关系的情形。若查询条件更为复杂,不仅包含and等表示“与”关系的逻辑关系,还包括or等表示“或”关系的逻辑关系时,由于现有的索引自动建立方法只能将SQL查询语句所反映的查询条件中涉及到的索引字段进行简单重复或拼接,共同作为索引列来建立一个多重索引,该多重索引中各索引列之间为“与”关系,即,现有的索引自动建立方法只能实现and等表示“与”关系的逻辑关系,不能实现or等表示“或”关系的逻辑关系,因此,针对查询条件更为复杂的情形,利用现有索引建立方法所建立的索引常常是错误的。
针对此情况,目前常采用由数据库管理员对复杂的查询条件进行人工审核的方式,来按照经验建立索引。例如:
若SQL查询语句所反映的查询条件为从testTable数据库表中查找name为“张三”且age为“19”或nationality为“中国”的数据字段,其SQL查询语句的表现形式为:select*fromtestTablewherename=‘张三’andage=‘19’ornationality=‘中国’,即SQL查询语句中不仅包含and等表示“与”关系的逻辑关系,还包括or等表示“或”关系的逻辑关系时,数据库管理员通过分析得知,“name=‘张三’andage=‘19’与nationality=‘中国’”实为具有“或”关系的两个子查询条件,当其中任一子查询条件满足时,均可以得到符合要求的数据字段结果,因此,数据库管理员将根据该SQL查询语句中的两个子查询条件为该数据库表建立两个索引,其一为根据SQL查询语句中的子查询条件“name=‘张三’andage=‘19’”建立的以“name”和“age”索引字段共同作为索引列的多重索引,其二为根据SQL查询语句中的子查询条件“nationality=‘中国’”建立的以“nationality”索引字段为索引列的简单索引,也就是说,将原来的查询条件人为拆分为两个查询子条件,分别为:“name=‘张三’andage=‘19’”、“nationality=‘中国’”,再由计算机等设备针对拆分后的两个查询子条件分别建立索引。但是,由数据库管理员对复杂的查询条件进行人工辅助的方式来建立数据库索引时,常需要占用数据库管理员较多的精力,增加人员负担,且建立索引的效率低。
综上所述,在目前的数据库索引建立过程中,由于计算机无法识别查询条件中表示“或”关系的逻辑关系,从而使得针对具有“或”关系的查询条件所建立的索引有误,而采用人工辅助方法建立索引时又会增加人员负担,且建立索引的效率低。
发明内容
本申请实施例提供了一种数据库索引的建立方法及装置,用以解决现有技术中存在的查询条件中包含表示或关系的逻辑关系时,利用计算机自动建立的索引有误且采用人工辅助方式建立索引时效率低的问题。
一种数据库索引的建立方法,包括:
确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数;
将所述查询语句中的查询条件转换为多叉树形式,其中,所述表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件;
根据所述多叉树中N+1个子节点中的子查询条件分别建立索引。
一种数据库索引建立装置,包括:
第一确定模块,用于确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数;
第一转换模块,用于将所述查询语句中的查询条件转换为多叉树形式,其中,第一确定模块所确定的表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件;
索引建立模块,用于根据第一转换模块转换后的所述多叉树中N+1个子节点中的子查询条件分别建立索引。
本申请的有益效果如下:
本申请实施例提供了一种数据库索引的建立方法及装置,当查询语句中包括表示或关系的逻辑运算符时,以该表示或关系的逻辑运算符为根节点,以每个表示或关系的逻辑运算符之前和之后的子查询条件为子节点,将所述查询语句中的查询条件转换为多叉树形式,从而使得在根据所述查询语句建立索引时,可依据不包含或关系的逻辑运算符的子查询条件来分别建立索引,避免了当计算机无法识别表示或关系的逻辑运算符时索引建立有误的问题,实现了通过计算机自动建立数据库索引的目的,在确保索引建立准确性的同时还提高了建立索引的效率。
附图说明
图1所示为本申请实施例一中数据库索引的建立方法流程示意图;
图2所示为本申请实施例一中根据查询语句中的查询条件转换的多叉树结构示意图;
图3所示为本申请实施例一中根据查询语句中的查询条件转换的多叉树的具体结构示意图;
图4所示为本申请实施例一中对索引字段进行排序后的多叉树的具体结构示意图;
图5所示为本申请实施例二中根据查询语句中的查询条件转换的多叉树的具体结构示意图;
图6所示为本申请实施例二中对索引字段进行排序后的多叉树的具体结构示意图;
图7所示为本申请实施例三中数据库索引建立装置结构示意图。
具体实施方式
下面结合说明书附图对本发明实施例作进一步说明,但本发明不局限于下面的实施例。
实施例一:
如图1所示,其为本申请实施例一中数据库索引的建立方法流程示意图,所述方法包括以下步骤:
步骤101:确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数。
所述查询语句能够反映建立索引时所依据的查询条件,具体可以为SQL查询语句。同时,本申请实施例所述查询语句中包含表示或关系的逻辑运算符,还可以包含能够改变逻辑运算符运算优先级的符号,但是,在包含能够改变逻辑运算符运算优先级的符号时,该符号不得改变查询语句中各逻辑运算符的运算顺序。具体地,所述表示或关系的逻辑运算符可以为or等逻辑运算符,所述改变逻辑运算符运算优先级的符号可以为()等符号。
例如:针对建立的testTable数据库表,所述testTable数据库表如下所示:
CreateTabletestTable(
namechar(10)notnull,
ageint(10)notnull,
identityint(10)notnull,
nationalitychar(10)notnull,
sexchar(10)notnull,
heightint(10)notnull,
weightint(10)notnull,
educationlevelchar(10)notnull,
primarykey(identity)
)
若针对所述testTable数据库表的查询条件为从testTable数据库表中查找name为“张三”且age为“19”且性别为“男”、或身份号码为“10010”、再或身高为“180”的数据字段,则其SQL查询语句的表现形式可以为:select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’;
或者也可以为:select*fromtestTablewhere(name=‘张三’andage=‘19’andsex=‘男’)or(identity=‘10010’)or(height=‘180’),在此情况下,能够改变逻辑运算符运算优先级的符号,即括号,并没有改变该SQL查询语句中各逻辑运算符的运算顺序。
依据步骤101,在上述两种查询语句中,确定的表示或关系的逻辑运算符为or,且数目为2,即N=2。
步骤102:将所述查询语句中的查询条件转换为多叉树形式,其中,所述表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件。
具体地,针对上述查询语句:select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’,在将所述查询语句中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”转换为多叉树形式后,在该转换后的多叉树中,表示或关系的逻辑运算符“or”为该多叉树的根节点;由于在所述查询语句中,表示或关系的逻辑运算符“or”的数量为2,因此,该根节点下应有2+1=3个子节点,且所述子节点中分别包含子查询条件“name=‘张三’andage=‘19’andsex=‘男’”、“identity=‘10010’”以及“height=‘180’”,根据所述查询语句转换后的多叉树形式可如图2所示,需要说明的是,通过本步骤102的操作后,在各子节点中的子查询条件中并不包含表示或关系的逻辑运算符。
在图2所示的多叉树中,每个子节点又可以进一步划分为子多叉树的形式,其具体过程可以如步骤102’所示:
步骤102’:针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数,并根据确定的逻辑运算符和逻辑运算数建立子多叉树。
具体地,针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数,并执行以下操作:
将确定的逻辑运算符中低运算优先级的逻辑运算符作为父节点,并将确定的高运算优先级的逻辑运算符作为所述父节点的下一级子节点,其中,下一级子节点的数量是低运算优先级逻辑运算符的数量加1,以此循环,直至确定的所有逻辑运算符均执行完上述操作后,将确定的逻辑运算数作为叶子节点,得到执行上述操作的根节点下的子节点中子查询条件转换后的子多叉树的形式。
具体地,仍以查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”为例,在经过步骤101和步骤102操作后所得到的多叉树中,表示或关系的逻辑运算符“or”为该多叉树的根节点,子查询条件“name=‘张三’andage=‘19’andsex=‘男’”、“identity=‘10010’”以及“height=‘180’”分别为该多叉树的子节点。
针对根节点“or”下的每个子节点,如包含子查询条件“name=‘张三’andage=‘19’andsex=‘男’”的子节点,在确定该子节点中子查询条件的逻辑运算符为“=”和“and”、逻辑运算数为“name”、“张三”、“age”、“19”、“sex”以及“男”后,执行以下操作:
将确定的逻辑运算符中的低运算优先级的逻辑运算符“and”作为父节点,将确定的逻辑运算符中高运算优先级的逻辑运算符“=”作为该父节点的下一级子节点,以此循环,直至确定的所有逻辑运算符均执行完上述操作;由于该子节点中子查询条件的逻辑运算符只包含“=”和“and”,因此,在将确定的逻辑运算符中高运算优先级的逻辑运算符“=”作为“and”父节点的下一级子节点后,即可将确定的逻辑运算数作为叶子节点,得到该子节点中子查询条件转换后的子多叉树形式。
特殊地,针对根节点“or”下包含子查询条件“identity=‘10010’”的子节点或者包含子查询条件“height=‘180’”的子节点,由于确定的子节点中子查询条件的逻辑运算符均只包含“=”,因此,在将确定的逻辑运算符“=”作为父节点后,即可将确定的逻辑运算数作为叶子节点,得到子节点中子查询条件转换后的子多叉树形式。
具体地,在将确定的逻辑运算数作为叶子节点下挂在多叉树的某一内部节点下时,在所述子查询条件中存在关联关系的两个逻辑运算数应作为同一内部节点的左右两个叶子节点,同时下挂在该内部节点下。例如,逻辑运算数“name”和“张三”需要同时作为多叉树中“=”这一内部节点的左右两个叶子节点,下挂在该内部节点“=”之下。
步骤103:根据所述多叉树中N+1个子节点中的子查询条件分别建立索引。
本步骤103建立索引的过程具体包括:分别根据所述多叉树中每个子节点的子多叉树,将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引。
仍以查询语句:select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’为例,由于在经过步骤102的转换后,所得到的多叉树中的各子节点中的子查询条件分别为“name=‘张三’andage=‘19’andsex=‘男’”、“identity=‘10010’”以及“height=‘180’”,可以看出,在上述三个子查询条件中并不包含表示或关系的逻辑运算符,因此,可以采用现有技术分别针对各子查询条件为该testTable数据库表建立一个索引,具体地,可以针对任一子查询条件,将各子查询条件中涉及到的索引字段提取出来,作为索引列建立索引;最终得到的索引个数与多叉树结构中根节点下的分叉数相等。
例如:对于子查询条件为“name=‘张三’andage=‘19’andsex=‘男’”的子节点,提取出的索引字段为“name”、“age”和“sex”,因此,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“name”、“age”和“sex”共同作为索引列的索引(name,age,sex),该多重索引建立过程所对应的SQL语句为:CreateindextestTable_name_age_sexONtestTable(name,age,sex);
对于子查询条件为“identity=‘10010’”的子节点,提取出的索引字段为“identity”,因此,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“identity”作为索引列的索引,该索引建立过程所对应的SQL语句为:CreateindextestTable_identityONtestTable(identity);
类似地,对于子查询条件为“height=‘180’”的子节点,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“height”作为索引列的索引,该索引建立过程所对应的SQL语句为:CreateindextestTable_heightONtestTable(height)。
进一步地,由于在步骤102’中已针对确定的根节点下每个子节点中子查询条件的逻辑运算符和逻辑运算数,分别为根节点下每个子节点中子查询条件建立了子多叉树结构。因此,在本步骤103中,可以根据各子多叉树中确定的逻辑运算数,将所述逻辑运算数中涉及到的索引字段提取出来,作为索引列建立索引;最终得到的索引个数与多叉树结构中根节点下的子多叉树的数量相等。
经过上述步骤101、步骤102、步骤102’以及步骤103的操作后,最终根据所述查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”得到的多叉树的具体结构示意图可参见图3所示。
进一步地,在确定的子节点中子查询条件的逻辑运算数中包含多种索引字段时,还需要根据各索引字段的属性信息,如索引字段所对应的数据库表的列中唯一数据的种类多少或者索引字段所对应的数据库表的列中唯一数据的数量与该数据库表中的行的数量的比值大小,来确定各索引字段所表示的内容唯一性的高低,并针对包含多种索引字段的任一子多叉树中的叶子节点,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前,即针对具体的查询业务需求,对现有的数据库表中的数据字段进行采样,进而根据得到的采样数据对索引字段所表示的内容唯一性的高低进行分析,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前,从而使得以排序后的索引字段为索引列所建立的索引更加符合实际查询业务需求,进一步提高查询效率。
例如:如图3所示,在根据查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”建立的多叉树结构的具体示意图中,以包含子查询条件“name=‘张三’andage=‘19’andsex=‘男’”的子节点建立的子多叉树的叶子节点中包含多种索引字段,分别为“name”、“age”和“sex”,因此,还需要进一步根据索引字段的属性信息来确定各索引字段所表示的内容唯一性的高低,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前。
例如,若建立的testTable数据库表中,“name”列所包含的10个数据字段均为“李四”;“age”列中所包含的10个数据字段中有3个为“18”、2个为“20”、3个为“30”、2个为“25”;“sex”列所包含的10个数据字段中有5个为“男”、5个为“女”,则可以得知,“age”列中唯一数据的种类为4、“sex”列中唯一数据的种类为2、“name”列中唯一数据的种类为1,即“age”、“sex”以及“name”三个索引字段的内容唯一性依次降低,因此,需要将内容唯一性最高的索引字段“age”放在内容唯一性次之的索引字段“sex”之前,将内容唯一性次之的索引字段“sex”放在内容唯一性最低的索引字段“name”之前,并以此排序来更新子多叉树中的叶子节点的排序,此时,根据查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”建立的对索引字段排序后的多叉树结构的具体示意图如图4所示。
进一步地,步骤103中根据所述多叉树中N+1个子节点中的子查询条件分别建立索引,还可以包括以下内容:分别根据所述多叉树中每个子节点的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序,依次将所述索引字段作为索引列建立索引,或者,在将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引后,按照索引字段的位置顺序,对已建立的索引中的索引字段进行排序。
也就是说,在本申请实施例中,可以在按照各索引字段所表示的内容唯一性的高低,对索引字段进行排序之后,再根据索引字段的位置顺序,依次将所述索引字段作为索引列建立索引;也可以在未对索引字段进行唯一性高低的排序之前,以未排序的索引字段作为索引列建立索引,在建立索引之后,再按照索引中各索引字段所表示的内容唯一性的高低,对已建立的索引进行索引列的顺序变更。
仍以上述查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’”的子查询条件“name=‘张三’andage=‘19’andsex=‘男’”为例,按照该子查询条件中索引字段的位置顺序最终建立的索引为(age,sex,name),该多重索引建立过程所对应的SQL语句为:CreateindextestTable_age_sex_nameONtestTable(age,sex,name)。
若当前testTable数据库表再次接收到的查询条件为从该testTable数据库表中查找name为“李四”、age为“18”且sex为“男”的数据字段时,就可以利用该更新后的以“age”、“sex”和“name”为索引列的多重索引,在无需对该testTable数据表进行正表遍历的情况下,在该testTable数据库表中最先定位到相应的age为“18”的数据字段所在的行,与最先定位到相应的name为“李四”的数据字段所在的行相比,进一步缩小了数据字段的查询区域,提高了数据字段的查询效率,进而在已定位的age为“18”的数据字段所在行的基础上定位到sex为“男”的数据字段所在的行,最后在已定位的age为“18”且sex为“男”的数据字段所在行的基础上定位到name为“李四”的数据字段所在的行,最终得到需要的数据字段。
本申请实施例提供了一种数据库索引的建立方法及装置,通过将查询语句中表示或关系的逻辑运算符作为多叉树的根节点、每个表示或关系的逻辑运算符之前和之后的子查询条件作为多叉树的子节点,将所述查询语句中的查询条件转换为多叉树形式,并依据转换后的多叉树中各子节点中的子查询条件分别建立索引的方式,解决了现有技术中存在的查询条件较为复杂时,由于计算机无法识别表示或关系的逻辑运算符,从而导致利用计算机自动建立的索引有误,并不符合实际查询条件的问题;同时也解决了采用人工辅助方式建立索引时索引建立效率低的问题。同时,在以多个索引字段共同作为索引列来建立索引时,将内容唯一性较高的索引字段位于内容唯一性较低的索引字段之前,从而使得建立的索引更加符合语义以及查询业务需求,进一步提高数据字段的查询效率。
实施例二:
本申请实施例二以具体的实例对实施例一中所述的数据库索引建立方法进行详细说明。
仍以建立的testTable数据库表为例,若针对所述testTable数据库表的查询条件更为复杂,为从testTable数据库表中查找name为“张三”且age为“19”且性别为“男”、或身份号码为“10010”、或身高为“180”且体重为“70kg”且国籍为“中国”、再或教育水平为“本科”的数据字段,其SQL查询语句的表现形式为:select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’,则根据所述查询语句中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’”为该testTable数据库表建立索引时包括以下步骤:
步骤一:确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数。
具体地,确定的所述查询语句中表示或关系的逻辑运算符为or且确定的所述表示或关系的逻辑运算符or的数量为N=3。
步骤二:将所述查询语句中的查询条件转换为多叉树形式,其中,所述表示或级关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件。
具体地,将所述表示或关系的逻辑运算符or作为多叉树的根节点,所述查询语句中每个表示或关系的逻辑运算符or之前和之后的子查询条件作为子节点建立多叉树结构,其中所述子节点共有4个,各子节点中包含的子查询条件分别为:name=‘张三’andage=‘19’andsex=‘男’、identity=‘10010’、height=‘180’andweight=‘70’andnationality=‘中国’以及educationlevel=‘本科’。
步骤三:针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数,并根据确定的逻辑运算符和逻辑运算数建立子多叉树。
具体地,对于包含子查询条件“name=‘张三’andage=‘19’andsex=‘男’”的子节点,在确定该子节点中子查询条件的逻辑运算符为“=”和“and”、逻辑运算数为“name”、“张三”、“age”、“19”、“sex”以及“男”后,执行以下操作:
将确定的逻辑运算符中的低运算优先级的逻辑运算符“and”作为父节点,将确定的逻辑运算符中高运算优先级的逻辑运算符“=”作为该父节点的下一级子节点,以此循环,直至确定的所有逻辑运算符均执行完上述操作;由于该子节点中子查询条件的逻辑运算符只包含“=”和“and”,因此,在将确定的逻辑运算符中高运算优先级的逻辑运算符“=”作为“and”父节点的下一级子节点后,即可将确定的逻辑运算数作为叶子节点,得到该子节点中子查询条件转换后的子多叉树形式。类似地,对于包含子查询条件“height=‘180’andweight=‘70’andnationality=‘中国’”的子节点,在将该子节点的子查询条件转换为子多叉树形式时,同样可以采用上述转换方式。
特殊地,对于包含子查询条件“identity=‘10010’”的子节点,在确定该子节点中子查询条件的逻辑运算符为“=”、逻辑运算数为“identity”以及“10010”后,由于确定的子节点中子查询条件的逻辑运算符只包含“=”,因此,在将确定的逻辑运算符“=”作为父节点后,即可将确定的逻辑运算数作为叶子节点,得到子节点中子查询条件转换后的子多叉树形式。
类似地,对于包含子查询条件“educationlevel=‘本科’”的子节点,由于确定的该子节点中子查询条件的逻辑运算符也只包含“=”,因此,在将确定的逻辑运算符“=”作为父节点后,即可将确定的逻辑运算数“educationlevel”和“本科”作为叶子节点,得到该子节点中子查询条件转换后的子多叉树形式。
具体地,在将确定的逻辑运算数作为叶子节点下挂在多叉树的某一内部节点下时,在所述子查询条件中存在关联关系的两个逻辑运算数应作为同一内部节点的左右两个叶子节点,同时下挂在该内部节点下。例如,逻辑运算数“name”和“张三”需要同时作为多叉树中“=”这一内部节点的左右两个叶子节点,下挂在该内部节点“=”之下。
如图5所示,即为经过上述步骤一至步骤三操作后得到的、根据所述查询语句转换的多叉树的具体结构示意图。
步骤四:根据所述多叉树中N+1个子节点中的子查询条件分别建立索引。
具体地,可以针对任一子查询条件,将各子查询条件中涉及到的索引字段提取出来,作为索引列建立索引;也就是,分别根据所述多叉树中每个子节点的子多叉树,将各子多叉树的叶子节点中包含的索引字段提取出来,作为索引列建立索引,最终得到的索引个数与多叉树结构中根节点下的分叉数相等。
对于子查询条件为“name=‘张三’andage=‘19’andsex=‘男’”的子节点,提取出的索引字段为“name”、“age”和“sex”,因此,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“name”、“age”和“sex”共同作为索引列的多重索引(name,age,sex),该多重索引建立过程所对应的SQL语句为:CreateindextestTable_name_age_sexONtestTable(name,age,sex);
类似地,对于子查询条件为“height=‘180’andweight=‘70’andnationality=‘中国’”的子节点,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“height”、“weight”以及“nationality”共同作为索引列的多重索引(height,weight,nationality),该多重索引建立过程所对应的SQL语句为:CreateindextestTable_height_weight_nationalityONtestTable(height,weight,nationality);
对于子查询条件为“identity=‘10010’”的子节点,提取出的索引字段为“identity”,因此,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“identity”作为索引列的索(identity),该索引建立过程所对应的SQL语句为:CreateindextestTable_identityONtestTable(identity);
类似地,对于子查询条件为“educationlevel=‘本科”的子节点,根据该子节点中的子查询条件为testTable数据库表建立的索引为以“educationlevel”作为索引列的索引(educationlevel),该索引建立过程所对应的SQL语句为:CreateindextestTable_educationlevelONtestTable(educationlevel)。
进一步地,若任一子多叉树的叶子节点中包含多种索引字段,则在根据该子多叉树建立的索引中,将内容唯一性较高的索引字段所表示的索引列置于内容唯一性较低的索引字段所表示的索引列之前。
也就是说,在确定的子节点中子查询条件的逻辑运算数中包含多种索引字段时,还需要根据各索引字段的属性信息,如索引字段所对应的数据库表的列中唯一数据的种类多少或者索引字段所对应的数据库表的列中唯一数据的数量与该数据库表中的行的数量的比值大小,来确定各索引字段所表示的内容唯一性的高低,并针对包含多种索引字段的任一子多叉树中的叶子节点,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前。
例如:如图5所示,在根据查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’”中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’”建立的多叉树结构的具体示意图中,以包含子查询条件“name=‘张三’andage=‘19’andsex=‘男’”的子节点建立的子多叉树的叶子节点中包含多种索引字段,分别为“name”、“age”和“sex”,以包含子查询条件“height=‘180’andweight=‘70’andnationality=‘中国’”的子节点建立的子多叉树的叶子节点中包含多种索引字段,分别为“height”、“weight”和“nationality”;因此,分别针对上述两子查询条件,还需要进一步根据索引字段的属性信息来确定各索引字段所表示的内容唯一性的高低,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前。
例如:若建立的testTable数据库表中,“name”列所包含的10个数据字段均为“李四”;“age”列中所包含的10个数据字段中有3个为“18”、2个为“20”、3个为“30”、2个为“25”;“sex”列所包含的10个数据字段中有5个为“男”、5个为“女”,则可以得知,“age”列中唯一数据的种类为4、“sex”列中唯一数据的种类为2、“name”列中唯一数据的种类为1,即“age”、“sex”以及“name”三个索引字段的内容唯一性依次降低,因此,需要将内容唯一性最高的索引字段“age”放在“sex”之前,将内容唯一性次之的索引字段“sex”放在“name”之前,并以此排序来更新子多叉树中的叶子节点的排序。
同样,若建立的testTable数据库表中,“height”列所包含的10个数据字段均为“175”;“weight”列中所包含的10个数据字段中有3个为“50”、2个为“55”、3个为“60”、2个为“45”;“nationality”列所包含的10个数据字段中有5个为“中国”、5个为“英国”,则可以得知,“weight”列中唯一数据的种类为4、“nationality”列中唯一数据的种类为2、“height”列中唯一数据的种类为1,即“weight”、“nationality”以及“height”三个索引字段的内容唯一性依次降低,因此,需要将内容唯一性最高的索引字段“weight”放在内容唯一性次之的索引字段“nationality”之前,将内容唯一性次之的索引字段“nationality”放在内容唯一性最低的索引字段“height”之前,并以此排序来更新子多叉树中的叶子节点的排序;此时,根据查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’”中的查询条件“name=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科’”建立的对索引字段排序后的多叉树结构的具体示意图如图6所示。
进一步地,步骤四中根据所述多叉树中N+1个子节点中的子查询条件分别建立索引,还可以包括以下内容:分别根据所述多叉树中每个子节点的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序,依次将所述索引字段作为索引列建立索引,或者,在将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引后,按照索引字段的位置顺序,对已建立的索引中的索引字段进行排序。
也就是说,在本申请实施例中,可以在按照各索引字段所表示的内容唯一性的高低,对索引字段进行排序之后,再根据索引字段的位置顺序,依次将所述索引字段作为索引列建立索引;也可以在未对索引字段进行唯一性高低的排序之前,以未排序的索引字段作为索引列建立索引,在建立索引之后,再按照索引中各索引字段所表示的内容唯一性的高低,对已建立的索引进行索引列的顺序变更。
以上述查询语句“select*fromtestTablewherename=‘张三’andage=‘19’andsex=‘男’oridentity=‘10010’orheight=‘180’andweight=‘70’andnationality=‘中国’oreducationlevel=‘本科””的子查询条件“name=‘张三’andage=‘19’andsex=‘男’”为例,按照该子查询条件中索引字段的位置顺序最终建立的索引为(age,sex,name),该多重索引建立过程所对应的SQL语句为:CreateindextestTableage_sex_nameONtestTable(age,sex,name);同样,根据所述查询语句的子查询条件“height=‘180’andweight=‘70’andnationality=‘中国’“最终建立的索引为(weight,nationality,height),该多重索引建立过程所对应的SQL语句为:CreateindextestTable_weight_nationality_heightONtestTable(weight,nationality,height)。
实施例三:
如图7所示,其为本申请实施例三中所述的数据库索引建立装置的结构示意图,所述数据库索引建立装置包括第一确定模块11、第一转换模块12和索引建立模块13:
所述第一确定模块11用于确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数。
具体地,所述查询语句可以为SQL查询语句,其能够反映建立索引时所依据的查询条件。同时,本申请实施例所述查询语句中包含表示或关系的逻辑运算符,还可以包含能够改变逻辑运算符运算优先级的符号,但是,在包含能够改变逻辑运算符运算优先级的符号时,该符号不得改变查询语句中各逻辑运算符的运算顺序。所述表示或关系的逻辑运算符可以为or等逻辑运算符,所述改变逻辑运算符运算优先级的符号可以为()号
所述第一转换模块12用于将所述查询语句中的查询条件转换为多叉树形式,其中,第一确定模块11所确定的表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件。需要说明的是,在经过第一转换模块12转换后得到的多叉树中,根节点所下挂的子节点的子查询条件中并不包含表示或关系的逻辑运算符。
所述索引建立模块13用于根据第一转换模块12转换后的所述多叉树中N+1个子节点中的子查询条件分别建立索引。具体地,所述索引建立模块13可以针对任一子查询条件,将各子查询条件中涉及到的索引字段提取出来,作为索引列建立索引;最终得到的索引个数与多叉树结构中的分叉数相等。
进一步地,所述数据库索引建立装置还包括第二确定模块14以及第二转换模块15:
所述第二确定模块14用于针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数;所述第二转换模块15用于将第二确定模块14确定的逻辑运算符中低运算优先级的逻辑运算符作为父节点,并将确定的高运算优先级的逻辑运算符作为所述父节点的下一级子节点,其中,下一级子节点的数量是低运算优先级逻辑运算符的数量加1,以此循环,直至确定的所有逻辑运算符均执行完上述操作后,将确定的逻辑运算数作为叶子节点,得到执行上述操作的根节点下的子节点中子查询条件转换后的子多叉树的形式;所述索引建立模块13具体用于分别根据所述多叉树中每个子节点的子多叉树,将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引。
进一步地,所述数据库索引建立装置还包括比较模块16:
所述比较模块16用于在第二确定模块14确定的逻辑运算数中包含多种索引字段时,根据各索引字段的属性信息,如索引字段所对应的数据库表的列中唯一数据的种类多少或者索引字段所对应的数据库表的列中唯一数据的数量与该数据库表中的行的数量的比值大小,来确定各索引字段所表示的内容唯一性的高低。
进一步地,所述第二转换模块15还用于针对包含多种索引字段的任一子多叉树中的叶子节点,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前;所述索引建立模块13具体用于分别根据所述多叉树中每个子节点的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序,依次将所述索引字段作为索引列建立索引,或者,在将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引后,按照索引字段的位置顺序,对已建立的索引中的索引字段进行排序。
需要说明的是,所述索引建立模块13根据所述查询语句中的子查询条件对应的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序分别建立的排序后的索引即为根据所述查询语句中的查询条件建立的最终索引。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种数据库索引的建立方法,其特征在于,包括:
确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数;
将所述查询语句中的查询条件转换为多叉树形式,其中,所述表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件,所述表示或关系分开的逻辑运算符分开的每个子查询条件当成一个整体作为所述根节点的子节点;
根据所述多叉树中N+1个子节点中的子查询条件分别建立索引。
2.如权利要求1所述的数据库索引的建立方法,其特征在于,在根据所述多叉树中N+1个子节点中的子查询条件分别建立索引之前,所述方法还包括:
针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数,并执行以下操作:
将确定的逻辑运算符中低运算优先级的逻辑运算符作为父节点,并将确定的高运算优先级的逻辑运算符作为所述父节点的下一级子节点,其中,下一级子节点的数量是低运算优先级逻辑运算符的数量加1,以此循环,直至确定的所有逻辑运算符均执行完上述操作后,将确定的逻辑运算数作为叶子节点,得到执行上述操作的根节点下的子节点中子查询条件转换后的子多叉树的形式。
3.如权利要求2所述的数据库索引的建立方法,其特征在于,根据所述多叉树中N+1个子节点中的子查询条件分别建立索引,具体包括:
分别根据所述多叉树中每个子节点的子多叉树,将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引。
4.如权利要求3所述的数据库索引的建立方法,其特征在于,所述方法还包括:
在确定的逻辑运算数中包含多种索引字段时,根据各索引字段的属性信息来确定各索引字段所表示的内容唯一性的高低;
针对包含多种索引字段的任一子多叉树中的叶子节点,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前;
根据所述多叉树中N+1个子节点中的子查询条件分别建立索引,具体包括:
分别根据所述多叉树中每个子节点的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序,依次将所述索引字段作为索引列建立索引,或者,在将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引后,按照索引字段的位置顺序,对已建立的索引中的索引字段进行排序。
5.如权利要求1所述的数据库索引的建立方法,其特征在于:
所述表示或关系的逻辑运算符是or逻辑运算符。
6.一种数据库索引建立装置,其特征在于,包括:
第一确定模块,用于确定查询语句中的N个表示或关系的逻辑运算符,所述N为正整数;
第一转换模块,用于将所述查询语句中的查询条件转换为多叉树形式,其中,第一确定模块所确定的表示或关系的逻辑运算符为多叉树的根节点,该根节点下有N+1个子节点,所述子节点中包含所述查询语句中每个表示或关系的逻辑运算符之前和之后的子查询条件,所述表示或关系分开的逻辑运算符分开的每个子查询条件当成一个整体作为所述根节点的子节点;
索引建立模块,用于根据第一转换模块转换后的所述多叉树中N+1个子节点中的子查询条件分别建立索引。
7.如权利要求6所述的数据库索引建立装置,其特征在于,所述数据库索引建立装置还包括:
第二确定模块,用于针对根节点下每个子节点,确定子节点中子查询条件的逻辑运算符和逻辑运算数;
第二转换模块,用于将第二确定模块确定的逻辑运算符中低运算优先级的逻辑运算符作为父节点,并将确定的高运算优先级的逻辑运算符作为所述父节点的下一级子节点,其中,下一级子节点的数量是低运算优先级逻辑运算符的数量加1,以此循环,直至确定的所有逻辑运算符均执行完上述操作后,将确定的逻辑运算数作为叶子节点,得到执行上述操作的根节点下的子节点中子查询条件转换后的子多叉树的形式。
8.如权利要求7所述的数据库索引建立装置,其特征在于:
所述索引建立模块,具体用于分别根据所述多叉树中每个子节点的子多叉树,将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引。
9.如权利要求8所述的数据库索引建立装置,其特征在于,所述数据库索引建立装置还包括:
比较模块,用于在第二确定模块确定的逻辑运算数中包含多种索引字段时,根据各索引字段的属性信息来确定各索引字段所表示的内容唯一性的高低;
所述第二转换模块,还用于针对包含多种索引字段的任一子多叉树中的叶子节点,将内容唯一性较高的索引字段置于内容唯一性较低的索引字段之前;
所述索引建立模块,具体用于分别根据所述多叉树中每个子节点的子多叉树,按照各子多叉树的叶子节点中包含的索引字段的位置顺序,依次将所述索引字段作为索引列建立索引,或者,在将各子多叉树的叶子节点中包含的索引字段作为索引列建立索引后,按照索引字段的位置顺序,对已建立的索引中的索引字段进行排序。
10.如权利要求6所述的数据库索引建立装置,其特征在于:
第一确定模块确定的所述表示或关系的逻辑运算符是or逻辑运算符。
CN201210154256.9A 2012-05-17 2012-05-17 一种数据库索引的建立方法及装置 Expired - Fee Related CN103425672B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201210154256.9A CN103425672B (zh) 2012-05-17 2012-05-17 一种数据库索引的建立方法及装置
HK14101784.2A HK1189063A1 (zh) 2012-05-17 2014-02-25 種數據庫索引的建立方法及裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210154256.9A CN103425672B (zh) 2012-05-17 2012-05-17 一种数据库索引的建立方法及装置

Publications (2)

Publication Number Publication Date
CN103425672A CN103425672A (zh) 2013-12-04
CN103425672B true CN103425672B (zh) 2016-05-04

Family

ID=49650430

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210154256.9A Expired - Fee Related CN103425672B (zh) 2012-05-17 2012-05-17 一种数据库索引的建立方法及装置

Country Status (2)

Country Link
CN (1) CN103425672B (zh)
HK (1) HK1189063A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105095255A (zh) * 2014-05-07 2015-11-25 中兴通讯股份有限公司 一种数据索引创建方法及装置
CN104268272A (zh) * 2014-10-14 2015-01-07 青岛海尔软件有限公司 一种数据唯一性检查方法及装置
CN107315744A (zh) * 2016-04-26 2017-11-03 杭州海康威视数字技术股份有限公司 一种数据查询方法及装置
CN107967284B (zh) * 2016-10-20 2022-07-05 北京京东尚科信息技术有限公司 用于存储、查询订单信息的方法和装置
CN110020227B (zh) * 2017-10-31 2021-10-15 北京国双科技有限公司 一种数据排序方法和装置
CN108256054A (zh) * 2018-01-15 2018-07-06 腾讯科技(深圳)有限公司 确定目标号码集合的方法和装置
CN110110211A (zh) * 2018-01-22 2019-08-09 北京京东尚科信息技术有限公司 基于通用模型的数据查询方法和装置
CN109063186A (zh) * 2018-08-27 2018-12-21 郑州云海信息技术有限公司 一种跨表查询方法及相关装置
CN109376173A (zh) * 2018-11-08 2019-02-22 郑州云海信息技术有限公司 一种数据查询方法、装置、电子设备及存储介质
CN109711587B (zh) * 2018-12-29 2023-10-24 北京天诚同创电气有限公司 污水处理厂的物资信息处理方法、系统以及服务器
CN110750555A (zh) * 2019-10-22 2020-02-04 中国工商银行股份有限公司 用于生成索引的方法、装置、计算设备以及介质
CN112699143B (zh) * 2019-10-23 2022-09-13 拉扎斯网络科技(上海)有限公司 查询方法、装置、电子设备及存储介质
CN111291215B (zh) * 2020-01-20 2023-08-25 聚好看科技股份有限公司 公式生成方法及服务器
CN113157720A (zh) * 2020-01-23 2021-07-23 阿里巴巴集团控股有限公司 查询语句的处理方法、装置、设备及介质
CN113297212A (zh) * 2021-04-28 2021-08-24 上海淇玥信息技术有限公司 一种基于物化视图的Spark查询方法、装置及电子设备
CN113268485B (zh) * 2021-06-02 2024-02-09 电信科学技术第十研究所有限公司 数据表关联分析方法、装置、设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412807A (en) * 1992-08-20 1995-05-02 Microsoft Corporation System and method for text searching using an n-ary search tree
CN101681377A (zh) * 2007-05-23 2010-03-24 微软公司 用于搜索的用户定义的相关性排序
CN101785002A (zh) * 2007-07-09 2010-07-21 谷歌公司 解释本地搜索查询

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5412807A (en) * 1992-08-20 1995-05-02 Microsoft Corporation System and method for text searching using an n-ary search tree
CN101681377A (zh) * 2007-05-23 2010-03-24 微软公司 用于搜索的用户定义的相关性排序
CN101785002A (zh) * 2007-07-09 2010-07-21 谷歌公司 解释本地搜索查询

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"密文数据库的快速检索";戴一奇等;《清华大学学报自然科学版》;19910410;第37卷(第4期);第24-27页 *

Also Published As

Publication number Publication date
CN103425672A (zh) 2013-12-04
HK1189063A1 (zh) 2014-05-23

Similar Documents

Publication Publication Date Title
CN103425672B (zh) 一种数据库索引的建立方法及装置
CN109240901B (zh) 性能分析方法、性能分析装置、存储介质和电子设备
EP2833271A1 (en) Multimedia question and answer system and method
CN105975617A (zh) 一种多分区表查询处理的方法和装置
CN107784102A (zh) 一种基于Oracle数据库的数据差异比较方法
CN104537341A (zh) 人脸图片信息获取方法和装置
US10664460B2 (en) Index B-tree maintenance for linear sequential insertion
CN111026710A (zh) 一种数据集的检索方法及系统
CN106599052A (zh) 一种基于ApacheKylin的数据查询系统及其方法
CN102314464B (zh) 歌词搜索方法及搜索引擎
CN106897437B (zh) 一种知识系统的高阶规则多分类方法及其系统
WO2019228015A1 (zh) 基于移动端NoSQL数据库的索引创建方法及装置
CN102819600B (zh) 面向电力生产管理系统关系数据库的关键词搜索方法
CN101957860B (zh) 一种发布、搜索信息的方法及装置
CN103678513B (zh) 一种交互式的检索式生成方法及系统
CN110580255A (zh) 一种存储并检索数据的方法以及系统
CN105653546B (zh) 一种目标主题的检索方法和系统
CN107818181A (zh) 基于Plcient交互式引擎的索引方法及其系统
AU2003222783A1 (en) Method and apparatus for querying relational databases
KR20180077830A (ko) 비공유 아키텍처 기반의 분산 스트림 처리 엔진에서 관계형 질의를 처리하는 방법, 이를 수행하기 위한 기록 매체 및 장치
CN107729518A (zh) 一种关系型数据库的全文检索方法及装置
CN106682107B (zh) 数据库表关联关系确定方法及装置
CN107784032A (zh) 一种数据查询结果的渐进式输出方法、装置及系统
KR101592670B1 (ko) 인덱스를 이용하는 데이터 검색 장치 및 이를 이용하는 방법
KR101679011B1 (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1189063

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: GR

Ref document number: 1189063

Country of ref document: HK

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20160504

Termination date: 20200517

CF01 Termination of patent right due to non-payment of annual fee