前言:中文期刊网精心挑选了数据库索引范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
数据库索引范文1
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)27-6592-02
Indexing and Querying in Moving Objects Database
ZHANG Xia
(Computer and Information Technology Institute of Nanjing College of Information Technology, Nanjing 210046, China)
Abstract: Firstly, the paper introduced the features of Moving Objects Database (MOD). Then, the moving objects indexing was classified according to the different index space: moving objects indexing in unconstrained space and moving objects indexing in network space. Several technologies of moving objects indexing were presented. And then, the paper introduced several querying techniques, and proposed that query evaluation should be multi-faceted, multi-perspective. Finally, the development of Indexing and querying in moving objects database were briefly presented.
Key words: moving objects database; index; query; unconstrained space; network space
1 绪言
随着无线通信、卫星定位等技术的飞速发展及其广泛应用,如何存储、查询和管理一些随空间改变和时间推移的数据成为现代数据库研究的一个重要方向。移动对象数据库(Moving Objects Databases,MOD)旨在常规的时空数据库基础上建立移动对象运动轨迹模型[1],增强数据更新和索引技术,扩展数据查询语言,并增加移动对象位置不确定性管理方法[2]。其研究重点集中于几个核心问题:1)移动对象建模和数据模型;2)索引方法和查询处理;3)精确性和不确定性管理;4)实现原型。而如何高效表示和查询移动对象的连续变化信息是移动对象数据库首先要解决的问题。本文对移动对象数据库的索引方法和查询处理作简单的综述。
2 MOD的主要特点
文献[2]中指出了MOD(移动对象数据库)不同于传统数据库的4个特点:
1)存储历史数据:MOD通过记录和处理对象位置或形状要素随时间的变化情况,保存了对象的现势信息、历史信息和过程信息,MOD的语义更丰富,更完整地表达和模拟移动对象的真实状态,更准确地反映移动对象的时序变化与发展的过程和规律。
2)支持动态属性:MOD提出了动态属性的概念,即属性值随时间持续改变而不需显式更新。
3)表达丰富的时空语义:MOD可以表达对象空间结构和空间拓扑关系等空间语义,还可以表达事件序列和时间相关性等时间语义。
4)管理位置不确定性:位置不确定性是移动对象的固有特性,这是因为受主客观因素的限制,移动对象不能(或不必)把每次定位的结果都上传到指挥监控中心的数据库,而是采用一定的折衷策略,在位置精度和通信开销之间取得平衡,从而使数据库中所保存的对象位置并不总与其实际位置一致。移动对象的位置不确定性对数据库的位置数据建模、索引和查询等方面都产生了深远的影响。
3 MOD的索引方法
MOD中的数据具有时间与空间双重变化的特点,其海量的时空数据经常要求能实时响应,所以,MOD的索引结构相当重要。MOD的索引不仅要考虑索引空间还要考虑索引时间,为了支持对移动对象的查询,必须对移动对象的不同时态进行索引,包括移动对象的完整历史轨迹索引、移动对象的当前及未来位置的索引[3]。根据移动对象的运动空间,可将移动对象分为无限制空间的移动对象和网络空间的移动对象两类。
3.1 无限制空间内移动对象索引
无限制空间内移动索引的研究围绕当前及未来位置的索引和历史轨迹索引展开。对当前及未来位置的索引主要有原时空存取,空间转换,参数化时空存取等方法;对历史轨迹的索引主要有空间索引扩展,重叠及多版本结构,面向轨迹存取等方法。例如,PA树[4]是一个参数式索引,它索引表达轨迹的多项式。该方法的作者认为最小外接矩形不能表示轨迹的平滑,应该将轨迹近似地表达为一系列连续的多项式运动函数。相比于R树[5]来说,PA树中用多项式系数代替R树结构中的最小外接矩形。
3.2 网络空间内移动对象索引
事实上,大多数的移动对象其实都不是无限制的,它们往往是被限制在网络中,例如汽车总是在道路网络中运行。网络空间中移动对象的表示可以利用网络中的线性参考位置,而不是用二维地理坐标。FNR[6]树是一种在道路网络中对移动对象历史轨迹的索引方法,由一个二维R树与一维R树组成。这种方法的主要缺点索引树结构中的大量节点,以及移动对象在路段变更时产生的大量更新。针对基于受限网络的移动对象管理研究中道路网模型简单,以及以空间平面坐标表达移动对象位置的方法不适合于道路网应用的问题,桂智明等人设计了一种针对道路网络的移动对象索引模型[7]。与FNR及相关改进的索引方法相比,该方法在移动对象位置更新及添加上有更高的效率,在相关查询上结果更加合理。在针对移动对象当前及未来位置的索引方法上,Au[8]方法通过AU分组提高单个移动对象更新的效率。
4 MOD的查询处理
索引的主要目标是高效的查询处理,移动对象数据库中查询种类繁多,选择性查询、最近邻查询、持续查询和连接查询等都是常见的查询要求;相同的索引方法对于不同的查询技术有不同的查询效率;不同的索引方法对相同的查询技术也是有不同的查询效率;相同的索引方法和查询方法,对于不同的查询要求也是有不同的查询效率,因此,MOD的查询效率依赖于查询种类、索引技术和查询算法等多个方面,不能单一地来评判某个查询方法的好与坏,对查询策略的评价应多方面,多角度考虑。
移动对象数据库中早期的K最近邻查询算法主要是查询某个指定时刻距离查询点最近的K个对象。接着,人们开始关注于连续性查询系统并将其应用于位置服务中,被查询的对象和查询点都可以处于运动的状态。现有方法中SEA-CNN[9]较具代表性,通过建立查询索引机制等手段降低了系统I/O开销,但没有深入讨论对中间结果的利用和动态查询的优化问题。为此,文献[10]提出了对象和结果的双缓存机制,减少静态查询重新初始化次数,进一步缩小动态查询搜索区域,实现了对象访问和查询结果的双重共享。概率方法也曾被应用到移动对象数据的查询中来,如文献[11]将概率查询方法运用到受限网络移动对象的不确定区域中,提出了对受限网络移动对象轨迹的不确定性点查询和概率范围查询。此外,还有一些其他的查询类型。文献[12]定义了一种基于事件的位置相关查询ELDQ(Event-based Location Dependent Query),提出了相应的网络内优化方法来降低处理ELDQ的代价,包括自适应传感器选择算法、网络内的查询传播方法和网络内的位置相关数据聚集算法。同时,该文设计了一种两级多查询优化策略来降低处理并发ELDQ查询的总体开销。
5 结束语
移动对象数据库系统往往具有海量数据以及复杂的时空运行特征,对于移动对象索引缺乏公认有效的,且能满足各种实际查询需求的方法。目前人们对移动对象索引研究取得了一定的成果,但尚有很多问题等待解决,文献[3]中指出移动对象数据库中索引的发展方向:1)分别索引网络数据及移动对象;2)增加索引支持的查询种类;3)索引的更新;4)MBR(最小外接矩形)作为对近似索引目标的技术,对索引目标的近似比较粗糙,容易产生死空间。
移动对象数据库中的查询不是孤立存在的,它与索引方法密切相关。某查询方法适用于一种索引方法,但不一定适用于另外一种索引方法,需要依据实际解决的问题而定。
参考文献:
[1] 何云斌,樊守德,郝忠孝.基于MOST模型的移动对象全轨迹建模[J].计算机工程,2008,34(16):41-43.
[2] 曾军,张跃鹏,张德.移动对象数据库及其应用[J].测绘科学与工程.2010,30(2):65-69.
[3] 肖晖,李清泉.移动对象数据库索引研究综述[J].计算机应用,2010,30(4):1064-1071.
[4] NI J,RAVISHANKAR C.Indexing spatio-temporal trajectories with efficient polynomial approximations[J].IEEE Transactions on Knowledge and Data Engineering, 2007,19(5):1-16.
[5] GUTYMAN A.R-trees:A dynamic index structure for spatial searching[C].Proceedings of the 1985 ACM SIGMOD International Conference on Management of Data. Boston:ACM Press,1984:47-57.
[6] FRENTZOS E.Indexing objects moving on fixed networks[C].Proceedings of the 8th International Symposium on Advances in Spatial and Temporal Databases. Santorini Island:Springer,2003:289-305.
[7] 桂智明,廖湖声.基于LRS与GDF的移动对象轨迹建模及索引[J].计算机应用研究,2008,25(9):2684-2686.
[8] CHEN J,MENG X.Update-efficient indexing of moving objects in road networks[J].Geolnformatica,2009,13(4):397-424.
[9] Xiaopeng Xiong,Mohamed F,Mokbel,et,al.SEA-CNN:Scalable Processing of Continuous K-Nearest Neighbor Queries in Spatio-temporal Databases[C].Proceedings of the 21st International Conference on Data Engineering.2005:643-654.
[10] 潘鹏.时空数据库的索引机制及查询策略研究[D].武汉:华中科技大学,2007.
数据库索引范文2
关键词:对象数据库;库跨类查询;对象查询;索引结构
中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)03-0502-02
1对象数据库跨类查询索引结构的设计
1.1对象数据库跨类查询概述
在对象数据库中,一个对象会对应一个相应的标识符,而对象间的关系就是由相应的对象所对应的标识符之间的关系来体现的。对象之间的关系是数据库实现跨类查询的基础。通过数据库查询语言中那些支持跨类查询的描述和支持跨类查询处理操作的描述,从而完成对象数据库跨类查询的操作。
1.2认识对象数据库跨类查询索引结构
基于对象数据库的对象数据库跨类查询索引结构多是依靠对象间的双向指针连接、跨类查询处理以及跨类查询描述进行设计的。其中跨类查询处理以及跨类查询描述是依赖于对象间的双向指针连接的。1.2.1对象间的双向指针连接数据库中的每一个对象都具有一个唯一的对象标识符,系统可以根据对象相对应的标识符以及这些对象之间所建立的联系,借助这些对象彼此间建立的双向指针连接来表示这些对象之间的相互联系。其中用于描述对象之间相互关系的双向指针连接,包括指针连接的建立和指针连接的删除这两个方面。
1)指针连接的建立。当数据库系统在创建那些属于不同类而且彼此之间具有相互联系的对象时,数据库系统会根据相应的对象所对应的标识符,通过建立这些对象彼此之间的指针连接来表示这些对象之间的相互关系。
2)指针连接的删除。当数据库系统中某个对象被删除时,数据库系统会将那些与这个被删除的对象之间相关的指针连接自动删除。
1.2.2跨类查询处理
在数据库跨类查询处理时,会以某个初始类中的对象为出发点,通过对象之间的指针连接,来寻找目标类中的对象,并使用跨类查询的目标表达式,对目标类中的对象进行计算,其中的计算结果即是跨类查询的结 果。1.2.3跨类查询描述
在数据库查询语言中,数据库查询语言中包含描述跨类查询的语法,可以有效支持跨类查询描述定义的相关操作。其中包括路径表达式以及和类路径表达式相似的形式。
2对象数据库跨类查询索引机制的实现
2.1对象数据库系统对对象之间的双向指针连接自动维护的实现2.1.1具有联系的对象之间双向指针连接的自动创建数据库系统在创建一个类中的对象时会根据其为每个对象所分配的相应的标识符,找到与该对象具有联系的其他所有的对象,然后数据库系统中把这些用于描述对象之间相互关系的双向指针连接记录下来,而这些用于描述对象之间相互关系的双向指针连接是由新创建对象所对应的标识符以及其所属类所对应的标识符、关联对象所对应的标识符以及关联对象所属类所对应的标识符组成的。这些对象间可能存在着1:m或1:1的关系,对于1:m的关系,则可通过多对的用于描述对象之间相互关系的双向指针连接来记录这些对象彼此之间的关系。而对于1:1的关系,可以通过一对用于描述对象之间相互关系的双向指针连接来记录这两个对象之间的关系。
2.1.2具有联系的对象之间双向指针连接的自动删除
数据库系统在删除某个类的其中一个对象的时候,数据库系统会在记录中自动找到那些与该被删除的对象之间所有的指针连接,并自动将这些指针连接从数据库系统中删除掉。2.2跨类查询的描述在进行跨类查询的描述时,需要具备跨类查询的起点类和终点类、跨类查询所要经历的路径、跨类查询的目标表达式等几项内容。其中对跨类查询的方向没有明确的规定,其方向即可以是单向的也可以是双向的。2.3跨类查询的执行
跨类查询的执行就是以某个初始类中的对象为出发点,通过对象之间的指针连接来寻找目标类中的对象,并使用跨类查询的目标表达式,将目标对象表达式的计算结果返回。跨类查询执行的具体步骤如下:
1)根据跨类查询命令,确定目标类与初始类之间的类路径,然后在确定类路径之后,还需要对其正确性进行检查,要检查该类路径中是否存在回路以及类路径中前后两个类之间是否具有某种语义上的关联。
2)对于初始类中的每一个对象,要在跨类查询路径所涉及的所有类之间查找具有相互联系的对象,一直到找到属于目标类的相关对象为止。由于这些具有相互联系的对象之间可能存在着1:m或1:1的关系,对于1:m的关系,则寻找与前一个类中的某一个对象具有相互联系的后一个类中的多个对象,然后一直重复上述的查询处理过程,直到所有的相关对象取完为止。对于1:1的关系,则寻找与前一个类中的某一个对象具有相互联系的后一个类中的相应的某一个对象。
3)采用相应的数据库表达式计算方法,并借助跨类查询所设定的目标类上的表达式,来对目标类上的对象进行计算,完成跨类查询的处理操作。
2.4路径表达式的计算
对象数据库查询处理模块的路径表达式计算的具体步骤如下:
1)验证路径表达式的正确性。一个正确的路径表达要满足如下两个方面的条件:一是正确的路径表达要求前后两个类之间要具有直接的关系,其中二者可以互为关系,或者其中一个类为另外一个类的类;二是正确的路径表达要求路径表达式的目标表达式必须是满足路径目标类属性要求的一个计算表达式。
2)数据库系统对初始类中的每一个对象进行扫描的时候,要根据相应的索引结构,对路径表达式所涉及的所有类,然后按照深度优先遍历算法查找这些类中具有相互联系的对象之间的关系,一直到找到目标类上的相应的对象为止。由于路径表达式的表达方向不明确,既可以是双向的也可以是单向的,所以查找的源点即可以是源类,也可以是目标类。
3)完成上述操作找到目标类上的对象后,还需要结合路径表达式的目标表达式,按照数据库表达式的计算方法,对目标表达式进行计算,并要把最终的计算结果返回。
3一种基于对象查询机制的索引结构
PNI即路径导航索引是基于对象查询机制而且支持路径表达式高效计算的一种索引结构,以下就以路径导航索引为例来对对象查询的索引结构进行说明。3.1路径导航索引结构的组成路径导航索引结构主要由Identity-Index、Path-Instance-Table、Attribute-Index这三部分组成。其中Path-Instance-Table用于存储路径的实例,而Identity-Index和Attribute-Index的建立是以Path-Instance-Table为基础的,Identity-Index和Attribute-Index的建立可以有效的实现快速的路径实例检索。
3.2路径导航索引结构的说明3.2.1 Path-Instance-Table
Path-Instance-Table翻译成汉语即路径实例表,顾名思义,路径实例表就是一张用来存储给定路径的所有实例的表,而且路径实例表中的每个元组对应一个具体的路径实例。数据库系统根据对象之间的关系,在不同的层次中,会给定相应层次的一个不同的路径。也就是说,可以通过对象间的关系来确定这些对象所有的路径实例。
路径实例表中存储的不是完整的对象实例,其中只存储了组成路径实例的所有对象的OID。在给定的一条路径即P=C1C2…Cn,该路径所对应的Path-Instance-Table的模式为[S1:OID,S2:OID,…,Sn:OID],其长度路径为n-1,是一个具有n列的路径实例表,而且每列的数据类型都是为OID的数据类型,即是取值范围为C1到Cn的所有实例的OID数据类型的数据集合,而路径实例表的每一行对应Path-Instance-Table的一个路径实例。
其中Path-Instance-Table即路径实例表在设计时需要做到如下两点:
1)对于互为逆路径的两条路径,只存储其中的一个路径实例,这样看以节省存储开销。因为对于任意可逆路径P及其逆路径P′,将组成P的每一个路径实例的对象序列进行顺序置换后就可以得到P′的路径实例。
2)如果路径实例表存储的是完整的路径实例,在计算路径表达式时,需要找到路径实例的最后一个对象实例,通过投影计算,推出路径表达式的结果。如果路径实例表存储的只是存储路径实例中的第一个和最后一个实例,需要进行一次对象遍历以存取路径实例上相应的对象实例,然后进行路径表达式的计算。
3.2.2 Identity-Index
在路径实例表上建立Identity-Index,可以快速的实现路径实例的检索。其中Identity-Index是通过在路径实例表的每一列上建立一个以OID作为记录关键字的B+树索引来实现的。其中addr1到addrn是包含有记录关键字OID的路径实例对应路径实例表相应元组的物理地址,PagePointer是指向索引树下一层结点的指针。
3.2.3 Attribute-Index
在路径实例表上建立Attribute-Index,可以有效减少路径表达式计算的开销。Attribute-Index是将路径上某个类对象的属性值映射到包含该对象的路径实例信息上。其中Key-length是索引属性的长度,Key-value是索引记录的关键字。
4结束语
结论:对象数据库跨类查询与对象查询作为支持那些非传统的复杂数据查询的两种重要的查询方法,在当前的数据库查询应用领域得到了广泛的应用。而对象数据库跨类查询与对象查询方法的实现是以其所采用的索引结构为基础的,索引结构的设计和优化直接决定着对象数据库跨类查询与对象查询这两种数据库查询方法的查询效率,因此如何实现基于对象数据库跨类查询机制索引结构的优化以及基于对象查询机制索引结构的优化,将成为今后数据库数据查询研究领域的一项重要研究课题。
参考文献:
[1]王国仁.路径表达式的算法研究[J].计算机学报,2003(9).
[2]黄泽谦.一种支持对象数据库高效查询处理的索引结构[J].计算机学报, 2010(8).
数据库索引范文3
1.CMCI概况
中国生物医学期刊引文数据库(简称CMCI)是通过《中文生物医学期刊引文查询系统》充实、完善后的新版本,乃是解放军医学图书馆继《中文生物医学期刊文献数据库(简称CMCC)》和《中文医学学术会议论文数据库(简称CMAC)之后研发的我国第一个生物医学领域规模最大的专业引文数据库。CMC1收录了1995年以来我国中文生物医学期刊1000余种,学科范围涉及了基础医学、临床医学、预防医学、药学、医学生物学、中医学、医院管理及医学情报等各个方面。涵盖该领域所有的核心期刊和重要期刊,含有200万条来源期刊文献和200余万条期刊引文数据。是我国深受欢迎的中文生物医学期刊引文检索工具。CMC1现己服务于全国医疗、科研单位。
2.CMCI的特点
2.1CMC1学科专一、专业性强。信息容量大、内容广泛,基本上再现了我国中文生物医学期刊引文的面貌。
2.2针对参考文献规范化程度低、错误率高、著录格式混乱等问题,该数据库采用了智能搜索与人工分析判断相结合,具备了独特的查准率与查全率的功能。
2.3服务方式是以关盘方式提供了单机版与局域网络版两种类型。数据更新周期短(每月更新)基本上与科技成果和保持同步。
2.4具有新颖独特的多途径引文扩展检索技术(二次检索)与限定第一作者检索功能,进一步提高了引文检索的查全率和查准率。
2.5检索途径多,本系统设置了“作者检索”、“刊名检索’、“复合检索”、“期刊目录”检索入口灵活方便,易于掌握。
3.CMCI检索与方法
3.1作者检索
作者文献被引用检索,其方法:点击“作者检索”按钮,输入第一作者姓名,无需勾选“第一作者”选择框,即可列出该作者(包括同名作者)发表文献被CMCI全部引用的情况。然后根据需要选中的被引文献标记“?”,点击“被引查询”按钮,系统自动列出与选中的相近引文,经过判断选择相近引文标记后“0’,点击“引证文献”按钮,即可显示此文章被引用总篇数,点击“显示”键后,最后以题名、作者、单位、出处项列出被引文献的引用情况。
作者发表文献检索,其方法:在“作者检索”框输入作者名,点击“发表文献”按钮,即可查出该作者所发表的文章(不计作者排名)如果勾选了“第一作者”,则仅查出该作者作为第一作者发表的文章。如查找多作者合著的文章,可输入多个名字,用空格分开,如“郭颖张金山钟南山”。用户根据需要还可再进行智能扩展检索:既作者/年扩展,作者扩展,题名/年扩展,题名扩展,出处扩展,全部扩展。
3.2刊名检索
先分别从“刊名”和“年代”的下拉列表中选择检索内容,然后点击“发表文献”按钮可查出期刊在某一年发表的文献。如果点击“被引文献”按钮可查出期刊某一年所发表文献的被引用情况。在此基础上,可根据需要再进行智能扩展检索,既是作者/年扩展,作者扩展,题名/年扩展,题名扩展,出处扩展,全部扩展。
3.3复合检索
“复合检索”可以按每年统计出期刊量,并对刊的被引情况和刊进行评价作用。在“复合检索”界面各项输入框中输入检索词(提示:单位名称不可作为检索词)检索时各项之间为“AND”关系。如果在每项输入框中输入多个检索词,词间必须用空格分开,词间的逻辑关系请选择该项右侧的“AND”或“OR'例如:在“单位”输入框中输入“301医院解放军总医院”,选择右侧的“OR’可检索出有关解放军总医院(别名:301医院)的文献。
另外,在“检索词”输入框中可输入较复杂的检索表达式,支持在任意字段中查询,无需指定字段。
例如:(301医院or解放军总医院)and北京and2003
3.4期刊目录
期刊目录仅为本库使用的来源期刊目录,被引的期刊 范围可能超出来源期刊范围。输入检索词(允许使用*或?通配符)搜索包含该词的所有来源期刊。期刊目录是按拼音排序,只要输入检索词,按“重新检索”按钮,便可列出相关杂志目录。还设有刊名“二次检索”功能,只要点击选中的刊名,便可列出该刊详细内容:刊名、KSN号、统一刊号、邮编代码、主办单位、地址、电话、期/年、创刊年代、期刊级别、邮编、电子邮箱、期刊分类和网站类等,这有利于被引情况的分析。
提示注意:CMCI收录参考文献的原则是只收录中国作者的期刊引文,不收录图书引文、会议引文、专利引文、外文期刊引文等。
4.CMCI的作用
4.1在医学科学研究中发挥作用
该系统比较系统全面地反映了我国近十年来的中文医学期刊文献的引用和被引用情况。通过对他人早期文献的引用可以客观地分析文献的引证和被引证的相互关系,揭示学科的相关性和学科的内在关系,从而全面了解某一学术观点的产生、发展及目前的研宄现状,及时掌握科技发展动态,了解自己以及同行研宄工作的进展;跟踪当前研宄热点。
4.2在医药卫生科技成果检索查新中的作用
引文检索己被列为我国科技查新的一项重要内容。它从另外一个侧面反映科技成果被他人的认可度、利用度和学术价值。本系统可以从引文数据的完整性、及时性、高查全率等方面满足广大数据月更新,查新单位的需求。为评估和鉴别某一研宄工作在学术界产生的影响力发挥作用。4.3对科技人员的学术职称评定、学术绩效评价等产生作用。
引文文献对于科研人员的学术业绩起到质的评价效果。己经纳入学术职称评定的一个重要指标。
4.4通过检索引文,评价技术成果的影响度,为选拔优秀科技人才,科研课题立项和科研基金的合理投入寻求基于实证的科学依据
医学领域是自然科学的一个大领域,需要研宄的课题非常广泛,通过考证引文之间的关系追溯其研宄的理论基础、科学依据和研宄价值,对于科学化选题和立项都有着重要价值。
3.5相关文献检索展示科学研究之间的内在联系
以共引文文献为依据,共引文献越多,其相关性越好,从而揭示同行研宄的相似性。
5.引文显示、下载、打印
所列出的被引文献条目中,只出现第一作者的名称,而来源文献条目中含有所有作者名称。相关文献的显示是以共引文献的数量多少排序。显示或下载条数最多不超过2000条。有较好的输出功能,可以对显示的引文进行选择或全部选中套录或打印。
数据库索引范文4
关键词:大型数据库;数据库设计;执行效率;索引;查询
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)26-6321-03
Method Research of Large-scale Database
HUA Yan
(Department of Information, Higher Normal School of Wuxi, Wuxi 214021, China)
Abstract:The implementation efficiency of large databases is always the biggest problem to the users. This paper will discuss four methods of database design: logical database design, index design, query design and table optimization ,and by these ways,the database structure can be designed to avoid poor design and to improve the implementation efficiency.
Key words: large database; database design; implementation efficiency; index; query
随着计算机应用系统的扩大,大型数据库已成为大中型企业管理应用的首选数据库平台。而大型数据库的执行效率一直是困扰系统用户的最大问题。软件项目在设计时,由于测试用例的数据量很小,很多有关执行效率的问题都反映不出来。但当项目交付使用并运行一段时间后,随数据量的增大,执行效率将成为突出的问题,进而影响系统实际运行的性能。本文将从对大型数据库系统执行效率带来影响的结构设计进行综合研究,从逻辑数据库设计、索引设计、查询设计和表的优化设计四个方面探讨数据库优化设计的方法,从而使数据库在结构设计时就能规避不良设计方式,提高数据库执行效率。
1 逻辑数据库的设计
在数据库逻辑设计过程中,为了保证数据库的一致性和完整性,数据库要按照关系数据库的规范化要求设计。
以函数依赖为基础的关系模式的规范化等级主要有五种: 1NF、2NF、3NF、BCNF和4NF,满足这些范式条件的关系模式可以在不同程度上避免冗余、插入和更新异常问题。在基于表驱动的系统中,基本表的设计规范是第三范式3NF。但是,满足3NF的数据库设计,往往不是最好的设计。没有冗余的数据库可以设计出来,但是,没有冗余的数据库未必是最好的数据库。有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。
合理使用冗余会为查询带来很大的好处,如经常被查询的汇总数据,可以在平时工作中就累加好,不需要到查询时再使用如sum之类的函数。
比如:一个学生管理系统中有成绩表,其字段有学号SNO , 课程号CNO , 成绩GRADE,而进行平均成绩统计时,是用户经常要在查询和报表中用到的。在表的记录量很大时,有必要把平均分作为一个独立的字段加入到表中,这里可以采用触发器以保持数据的一致性,从而提高数据库的执行效率。
2 索引设计
索引即将表数据按索引要求而产生有序的数据副本。在关系数据库的表上建立合适的索引,可以提高数据库数据查询的速度,改善数据库的性能。除了聚集索引,每一索引的使用都以磁盘容量作为代价,当使用一个索引,数据库引擎必须执行两个数据读取,这两个数据读取是数据库记录所必需的,第一个数据被读取到实际数据指针的索引,第二个数据被读入到指针指定的位置。因此创建索引时必须要与实际应用系统的查询需求密切结合,在提高查询速度和节省存储空间之间寻求最佳的平衡点:
2.1 在合适的列上建立索引
1)在经常用作过滤器或者查询频率较高字段上建立索引;
2)为包含了大量的空值列建立索引,使包含空值的记录集中排在表的末端,数据从无序变得有序, 可减少对这部分数据的遍历,提高查询效率。
3)有一列或多列经常被使用在where或join条件里,则为该列或多列建立简单或复合索引以提高查询效率。
4)在频繁进行排序(group by) 或分组(order by)的列上建立索引。
2.2 不需要创建索引的情况
1)如果表很小,包含的数据量很少,则无须建立索引。
2)列不经常被用在查询条件里, 无须建立索引。
3)不同值少的列,比如在学生表的“性别”列上只有“男”与“女”2 个不同值, 就无必要建立索引;
4)由文本、图像等数据类型定义的列。
5)表频繁被更新, 这样如果建立了索引,开销会很大,还会降低DML(INSERT、UPDATE、DELETE)操作执行的效率, 所以此种情况无须建立索引。
2.3 聚集索引和非聚集索引
聚集索引是指行的物理顺序与行的索引顺序相同的索引。一个表只能有一个聚集索引。非聚集索引是指定表的逻辑顺序索引,行的物理顺序与索引顺序不尽相同,每个表可以有多个非聚集索引。缺省情况下建立的是非聚集索引,但是在一些特定的情况下建立非聚集索引会极大的缩短查询的时间。建立索引时, 应考虑对两者的选择。
1)对有大量重复值、且经常有范围查询(between,>,=,
2)对于频繁修改的列、或者返回小数目的不同值的情况应避免建立聚集索引。
3)当以某字段作为查询条件,需要回传局部范围的大量数据时,应在此字段上建立聚集索引,而当查询所获得的数据量较少时,有必要在此字段上建立非聚集索引。
比如:回传2010年1月1日到2011年1月1日这个时间段之间的数据,可考虑在日期字段上建聚集索引,那么数据本来就是按照日期的顺序排列的,只要找到开始和结尾日期的数据就可以了,可以极大的节省时间。而如果使用非聚集索引,必须查到这个时间段中每个日期对应的位置,然后在根据位置存取数据,明显效率很低。
在实际应用中,要综合各要素点具体分析,以达到系统的性能综合最优。
3 查询设计
从大多数系统的应用实例来看, 查询操作在各种数据库操作中所占据的比重最大。许多程序员在开发数据库应用程序时,只注重用户界面的华丽,并不重视查询语句的效率问题,导致所开发出来的应用系统效率低下,资源浪费严重。因此,如何设计高效合理的查询语句就显得非常重要。
3.1 正确地使用索引
索引作为数据库中的重要数据结构,它的根本目的就是为了提高查询的效率。建立适合关系数据库系统的有用索引,这样就可以避免表扫描,并减少因为查询而造成的输入输出开销,有效提高数据的查询速度,优化数据库性能。
比如,在学生表中,如果创建学号为单列索引, 那么查询时WHERE 子句中应使用学号这个字段,使之成为有用索引。如果使用了其他字段, 那么学号这个索引就是无用索引:
SELECT SNO , SNAME, SEX
FROM S
WHERESNO = ’S1’
使用复合索引时, 必须保证在条件子句中首先使用复合索引的第一列。比如:在成绩表中,如果创建学号SNO和课程号CNO为复合索引, 那么在查询语句的WHERE子句中应这样使用:
SELECT SNO , GRADE
FROM SC
WHERESNO = ’S3’ANDCNO = ’C1’
否则,下列复合索引的使用是没用的, 系统仍然采用顺序扫描方式:
SELECT SNO , GRADE
FROM SC
WHERECNO = ’C1’ANDSNO = ’S3’
3.2 模糊匹配的避免
LIKE关键字支持通配符匹配,技术上称为正则表达式。但这种匹配特别耗费时间,应尽量避免使用这种模糊匹配。
比如: SELECT SNO FROM SC WHERE CNOLIKE′4 ′
即使在CNO字段上建立了索引,在这种情况下也还是采用顺序扫描的方式。
可改写为: SELECT SNOFROM SC WHERE CNO >′400′
这样,在执行查询时就会利用索引来查询,显然会大大提高速度。
3.3 子查询合并
子查询合并是将某些特定的子查询重写为等价的多个表的连接操作。子查询合并的作用在于能使查询语句的层次尽可能地减少,从而可提高查询的效率。子查询合并的一般规则为:
1) 如果外层查询的结果没有重复,即SELECT子句中包含主码,则可以合并其子查询,并且合并后的SELECT 子句前应加上DISTINCT 标志;
2) 如果外层查询的SELECT 子句中有DISTINCT标志,那么可以直接进行子查询合并;
3) 如果内部子查询结果没有重复元组,则可以合并。
比如:查询选修201号课程的学生基本信息。
SELECT S.SNO , SNAME ,AGEFROM SWHERE SNOIN( SELECTSNOFROM CNOWHERECNO =′201′)
3.4 善于使用存储过程
存储过程是存储在数据库中的一段程序,它可以接受参数、返回状态值和参数值,并且还可以嵌套调用,它是在建立时就已经编译和优化的程序。另外存储过程是一种模式化的程序设计,通过将公共集合编写为合理的存储过程,可避免冗余代码,减少程序员的工作量。因此善于使用存储过程会提高大型数据库的执行效率。
4 表的优化设计
基于第三范式设计的库表虽然有其优越性,然而在实际应用中有时不利于系统运行性能的优化,比如:需要部分数据时而要扫描整表,许多过程同时竞争同一数据,反复用相同行计算相同的结果,过程从多表获取数据时引发大量的连接操作,这都消耗了磁盘I/O和CPU时间。针对这些情况,可通过引入临时表来简化查询。
比如:查询每个系中年龄最大的学生的"学号"。
SELECT SNO FROM S AS s1 WHERE AGE=(SELECT MAX(AGE) FROM S AS s2 WHERE s1.SDEPT=s2.SDEPT)
以上的查询对于外层的年龄关系s1中的每一个元组,都要对内层的整个年龄关系s2进行检索,因此查询效率不高。可以构建临时关系提高查询效率。
SELECTMAX(AGE) AS maxage,SDEPTINTO tempFROMS GROUP BY SDEPT
SELECT SNO FROM S,temp WHERE AGE=maxage AND S.SDEPT=temp.SDEPT
又如,查询有最多男生的系的名称。使用单条查询语句获得查询结果较为困难,则可建立临时表 TEMPS (院系(SDEPT )、人数(NUMBER) ) ,先将各院系男生人数的统计结果写入此表, 再在表TEMPS中查出人数最多的院系名称。通过分解操作过程,使解决办法得以简化。
使用临时表时要注意对它的更新操作,以保持与原始表之间数据的一致性。使用完毕后,应对其删除,释放其所占用的空间。
总之,数据库的优化设计工作对提高系统执行效率起着重要的作用,但它又是一项综合性的工作,受到各种各样因素的制约,有些要求往往是彼此矛盾的。因此,设计结果常常是有得有失,设计者必须根据实际情况,将上述几个方面的优化策略有机地结合起来,尽可能使系统效率达到最优。
参考文献:
[1] 萨师煊,王珊.数据库系统概论[M].4版.北京:高等教育出版社,2007.
[2] 杨学全.SQL Server 实例教程[M].3版.北京:电子工业出版社,2010.
[3] 黄明辉.大型数据库的性能优化方法[J].计算机时代,2010(6):33-34.
数据库索引范文5
【 关键词 】 数据库;关键词检索
Research and Analysis Keywords Retrieval about the Database
Wu Pei
(China Youth University Political Sciences Beijing 100089)
【 Abstract 】 With the rapid development of network, database use increased substantially. At present, the data information basically is stored in a relational database, which we present retrieval through database interaction. Based on the document keywords retrieval techniques cannot be applied to a wide range of retrieval. We urgently need to study a technical. The technique must be user friendly, efficient and accurate. Although users do not understand the SQL statement, not understanding the database model structure, still can resemble traditional file based keyword retrieval as only input the keywords to search to the satisfaction of the results. This paper is how to mainly study and analyze the database keyword search.
【 Keywords 】 database;key words retrieval
1 引言
计算机给人类的生活和工作带来了日新月异的变化的同时,各种各样的互联网信息也成迅猛式增长。目前,我们流行的百度、Google等门户搜索网站,使得我们非常发方便的找到互联网上的相关信息。但是这些搜索引擎背后的知识库数据库也仅仅能搜索到互联网数据的很小一部分。对于专业的,局域的甚至特定的数据库,如何检索出用户需要的数据是一个值得我们研究的问题。基于数据库的关键词检索技术,会强大搜索功能将,使用户更加便捷的享受搜索服务,同时还能够各种用户的各种多变的查询要求。一般情况下,互联网数据库的者需要设计很多特定的查询表单来供用户的搜索使用,但这些是远远不够的,而且没有统一科学的数据支撑,基于数据库的关键字检索技术会使得者不用自行设计这些查询表单,数据库的网上会变得更加便捷容易。
2 传统关键字检索存在的问题
目前,绝大多数成熟的商业数据库系统都使用一种扩展功能来处理文本文档搜索或者县现成的检索机制。事实上,这种文本扩展功能和检索机制都不是那么完美,也存在一些缺点,其主要表现在几个方面。
(1) 文本扩展功能通常是面向单个文本属性的。例如SQL Server 2000、Oracle 9 i Text为关系表中的文本属性创建全文索引都可以利用标准的SQL语句来进行,查询结果使用contain(A,k)函数返回关键词来实现,函数中的A就是属性名称,k就是一个用户给定的关键词。由于关系数据库的规范化处理,通常情况下分别在不同的表中存储着关键词查询所需要的信息,要想得到查询结果必须对多个表进行连接操作才行。因此,对于全数据库的关键词检索,这种针对单个文本属性创建的全文索引无法给予有效支持。
(2)文本扩展功能并不是真正地与数据库系统集成在一起,它通常是一个独立的引擎。在API层面,文本的检索谓词与SQL所遵循的概念和语法不同,系统有时引导查询处理器如何使用索引和其他优化方法需要用户使用特定的语法来进行。事实上,对于真正的数据独立性,如果系统对此进行支持,那么对于用户而言这些工作都是不可见的。
(3) 现有研究成果没有很好的建立和使用较为有效的索引,它们中的大部分只是在最初对单个关系表查找包含某个关键字的元组时使用关系数据库本身自带的索引。我们设想如果能针对查询建立一个可应用于生成连接元组阶段的特殊索引,将会对查询效率以及准确率产生很大的提高。
3 关键字检索概述
关键字指的是名词、描述性词、词组和序列注册号 (Accession number)。Internet 拥有不下一万个数据库总量。其中,“Internet 可检索图书馆目录和数据库”就囊括了从美国国会图书馆到欧美各国许多公用图书馆和大学图书馆的几百个联机目录和数据库。数据库检索包含电子文献、数据、事实、图像、声音等所种媒体所载信息的检索。可以使用较特定的索引条目来检索以上数据库进行特定关键词的检索。
4 关键字检索方法
基于数据库的关键字检索。
数据库索引范文6
关键词:SQL server;数据库;查询优化
中图分类号:TP392文献标识码:A文章编号:16727800(2012)008013302
作者简介:张燕琴(1983-),女,华侨大学硕士研究生,泉州轻工职业学院助教,研究方向为数据库技术。
0引言
在众多数据库的应用实例中,查询操作所占的比重最大,数据库管理系统中80%的工作是用于数据的查询和检索,因此数据查询的快慢将直接影响到数据库系统的性能。为了优化数据库系统的性能,我们通过改进数据库使用的硬件条件、软件环境和规范化设计外,还应进行数据查询的优化。查询优化在关系数据库中是非常重要的,优化的目标是避免磁盘I/O瓶颈、减少CPU利用率和减少资源,能实现快速的数据查询。
1查询优化
数据库管理系统中的主要操作就是对数据的查询,为提高数据库的性能,查询优化必不可少。在实际的应用中,要尽可能避免排序(Sort)、连接(Join)和相关子查询操作。笔者认为查询优化要做到以下几点:
1.1SQL语句优化
(1)查询时要尽量减少对数据库的访问次数,不要过多地使用通配符,如:select * from STUDENT ,要用到几列就选择几列,如:select sno,sname from STUDENT。
(2)避免使用不兼容的数据类型,如:float和int、char和varchar等。数据类型的不兼容可能导致一些语句无法进行优化操作。如:select name from teacher where salary>5 000,在这里salary是money类型的,而5 000是一个整数,在程序编写的过程中就会将money变换为整数,而不是在运行时才转换。
(3)尽量避免在WHERE子句中对字段进行函数或表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
如:SELECT * FROM sc WHERE grade1/2=200
应改为: SELECT * FROM sc WHERE grade=200*2
即:投影操作会导致全表扫描,它包括数据库函数、计算表达式等,查询时要尽可能将操作移至等号右边。
(4)不要有超过5个以上的表连接(JOIN)。连接的表越多,其编译的时间和连接的开销也越大,性能也越不好控制,最好是把连接拆开成较小的几个部分逐个顺序执行,优先执行那些能够大量减少结果的连接。拆分的好处不仅仅是减少SQL Server优化的时间,更使得SQL语句能够以你可以预测的方式和顺序执行。考虑使用临时表或表变量存放中间结果,少用子查询。如果一定需要连接很多表才能得到数据,那么也就意味着数据库在设计时存在很大的缺陷。
(5)使用视图加速查询。把表的一个子集进行排序并创建视图。它有助于避免多重排序操作,而且在其他方面还能简化优化器的工作。
1.2操作符优化
(1)避免使用!=或<>、IS NULL或IS NOT NULL、IN、NOT IN等这样的操作符,因为这会使系统无法使用索引而只能直接搜索表中的数据。例如: SELECT sno FROM student WHERE sno!= '2009101%',优化器将无法通过索引来确定将要命中的行数,因此需要搜索该表的所有行。NOT IN此操作符是强烈不建议使用的,因为它不能应用表的索引。推荐方案:用NOT EXISTS 方案代替 。
(2)> 及 < 操作符(大于或小于操作符)一般情况下是不用调整的,因为它有索引就会采用索引查找。但有的情况下可以对它进行优化,如一个表有200万记录,一个数值型字段A,60万记录的A=0,60万记录的A=1,79万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为A>2时SQL会先找出为2的记录索引再进行比较,而A>=3时SQL则直接找到=3的记录索引。
(3)LIKE操作符可以应用通配符查询,里面的通配符组合可以实现几乎是任意的查询。但是如果用得不好,则会产生性能上的问题,如LIKE ‘%3600%’ 这种查询不会引用索引,而LIKE ‘a3600%’则会引用范围索引。
1.3使用存储过程
存储过程是一个可重用的代码模块,可以高效率地完成指定的操作。存储过程允许用户进行模块化程序设计,大大提高了程序的设计效率,存储过程创建后,可以在程序中任意调用,减少了重新编译的时间。同时,存储过程也减少了客户端和服务器的繁复交互。如果程序后需要做某些改变,则可以直接修改存储过程而不用修改程序,从而提高效率。
2索引优化
对于查询的优化,数据库管理系统通常采用索引技术来加快对表中数据的检索。索引允许数据库应用程序迅速找到表中的数据,而不必扫描整个数据库。索引是一种表或视图关联的物理结构,可以用来加快从表或视图中检索数据行的速度。通过创建索引可以保证每一行数据的唯一性,可以大大加快数据的检索速度,也可以加快表和表之间的连接。在使用order by和group by子句进行数据查询时,可以减少查询中的分组和排序时间,且可以在查询的过程中使用优化隐藏器,提高系统的性能。
2.1索引的分类