数据库查询效率

2024-09-20

数据库查询效率(精选4篇)

数据库查询效率 第1篇

关键词:分布式数据库,并行数据库,查询优化技术

近年来,随着信息技术的快速发展,数据库技术应用越来越广泛,已成为信息化建设的核心。目前应用最广泛的数据库主要有两类,分别是分布式数据库和并行数据库。其中,由于网络技术的快速发展,分布式数据库已得到了广泛的应用。并行数据库在许多方面也得到了很好的应用。所以提高数据库的效率已成为迫切的任务。其中,查询是数据库中最常用操作,同时也是用户操纵、维护数据库中的数据的唯一途径。用户对数据库性能的直接感觉就是数据库管理系统对查询的处理是否高效、快速。查询处理的效率在很大程度上决定了数据库管理系统的性能。所以提高查询效率已成为数据库研究的热点。

现在我们看看,查询优化的发展:由CCA公司开发的SDD-1采用的查询优化方法是对逻辑关系用基本的运算操作来缩减;IBM公司设计的R*采用直接连接作为查询处理策略,同时为提高查询效率采用了动态规划的方法;加州大学伯克利分校研制的INGRES采用基于分解的优化算法;ORACLE是一款十分优秀的商业数据库,采用基于代价的优化或基于规则的优化找出一个执行代价较低的执行计划,由于在确定数掘的分布时,引入了直方图来描述数据值的分布而不是假设数据值是均匀分布的,从而大大提高了代价估计的精确度。可见,数据库查询优化已得到了快速的发展,从理论研究到了实践工程应用,并且在实际工程中的作用已经越来越重要了,特别是在实时数据库系统中尤为突出。数据库查询优化已成为数据库发展的一个重要研究方向。论文主要研究分布式数据库的查询优化问题,同时简单介绍并行数据库查询优化的常用方法及发展趋势。

1 数据库查询优化方法详解

为了让大家能清晰的了解数据库查询优化的主要方法,论文从两个方面来研究数据库的优化问题。首先介绍分布式数据库的查询优化技术,在该部分侧重于方法和策略的描述,不涉及到具体的算法。然后,研究一下并行数据库的查询优化技术,在该部分侧重于具体算法的论述。通过这两部分内容,就能较全面的为大家展现数据库查询优化技术的内涵。

1.1 常见分布式数据库查询优化方法

在分布式数据库中,我们进行查询优化的主要目标就是以最小的总代价,在最短的时间内获得所需的数据。它的实现既与通信时间有关,也与局部处理时间相关,根据不同的互连网络状况可以有不同的查询优化策略。总体上,可分为5个方面。

1) 基于关系代数的优化方法:

数据库查询操作的基础就是关系运算,所以利用关系代数变换来实现查询优化是目前最常见的方法。其主要原理就是通过关系代数的等价变换,从而减少查询中的计算量,进而实现查询的优化。主要原则就是在关系运算中尽量避免直接执行运算量较大的笛卡儿积运算,而采用先执行关系代数表达式中的选择和投影操作,后把笛卡儿积操作之前和之后的一连串选择和投影合并起来一起做。这样就能减小运算量。该方法主要用于删除无用数据,从而减小运算,主要作为预处理使用。

2) 基于直接连接查询的优化方法:

该方法的着眼点在于连接,通过研究关系的静态属性来构建一个最好的处理策略和连接顺序。在分布式数据库中,主要采用的优化策略为:

第一种,利用站点依赖信息来实现。就是在关系进行连接运算时,首先将同一站点上的子片段进行连接,然后再传输到目标站点上进行合并。该方法的主要优势是站点间无数据传送代价,并可利用本地索引信息加速连接。第二种是分片和复制算法。该方法就是将查询需要的关系的片段分配到选定的站点上,然后将其它关系进行复制,目的是让选定的站点上都搬出完整的关注,第三步就是在各站点上进行直接连接操作,最好将结合传到目的站点,该方法的主要优势是响应时间更短,但存在数据冗余的缺点。第三种是站点依赖和数据复制结合。该方法结合站点依赖信息和数据复制信息,减少关系片段的复制,使特定查询能以无数据传输的方式进行,从而缩短响应时间。最后一种方法是采用Hash划分策略。该方法采用Hash函数将关系根据连接属性进行片段划分,使得连接的两个关系之间满足站点依赖,以根据站点依赖方法进行连接查询。基于直接连接查询的优化方法由于传输代价太大,所以只适合于查询处理慢,传输快的高速局域网场合。

3) 半连接优化策略:

从上述基于直接连接查询的优化方法的论述中,我们可以看到该方法的主要缺点就是在不同站点间传输的数据量太大,针对这一缺点,开发出了半连接优化策略。该方法的主要特点是通过投影和连接运算可以有效的减少操作关系的大小,从而减少站点之间的数据传输量,以尽可能只传输参与连接的数据,减少了数据传输时间,降低了CPU和磁盘I/O代价,提高了查询效率;但半连接也会导致通信次数的增加和局部处理时间的增加,适用于传输代价高而局部处理时间短的场合。该方法的主要目标是能够有效降低站点间的数据传输量,从而降低网络传输代价,由于半连接不具有对称性,连接顺序的不同会导致中间结果大小的不同,因此基于半连接的多关系分布式查询优化算法的目标就是找到一个最优的半连接执行顺序,使得产生的中间结果最小,以降低网络传输代价,缩短查询响应时间。

为了进一步的提高半连接优化策略的效果,还设计了双向半连接策略和全归约技术。其中,双向半连接策略通过两次半连接将关系R和S完全归约,减少了网络间数据传输的代价,适用于明确要求将关系R和S传送到第三站点进行连接的情况。其中,全归约技术首先将所有关系的前导属性传送到一个站点进行连接操作,再将连接结果中的属性分别传回原节点,对原关系进行归约以得到所有的有效元组,最后将有效元组传送到目的节点进行连接。该方法是对半连接技术的加强,其最大限度的对分布式数据库中的关系进行了归约,在传输过程中只传送查询结果中要包含的元组,减少了传输代价。全归约算法不依赖于关系的静态特性,不需要对静态特性的维护,提高了准确率;不需要搜索对比所有可能的半连接操作程序,并减少了通讯代价。但当一个关系中具有多个连接属性时,多个连接属性投影后得到的临时关系可能会很大,与原关系记录数相差不多,这时传输代价较大。

4) 索引优化:

为提高查询的速度,通常会采用索引技术,该技术能够减少查询搜索的时间,从而优化查询效果。目前在数据库查询优化中主要采用3类索引技术,分别是:散列索引、基于树的索引和位图索引。其中,由于索引表需要占用内存空间,为减小系统开销,一般采用散列索引。散列索引的主要优势就是索引表占用的内存空间小。曾有学者提出“通过散列表保存关系中关键值的上下限记录位置,以确定一个小于整个表的扫描范围,以此减少扫描时间。”,还有学者对散列技术进行了改进,提出了双层的查询优化算法和双项的查询优化算法。其中双层的查询优化方法的主要原理是:通过建立双层散列,在散列表之上再加一次散列,以适应散列表较大时的情况。而双项的查询优化算法中对散列表增加了一个记录号次下限和次上限,以更精确的定位记录所在的区域,并减少删除、修改操作对散列表信息及查询优化效率的影响。

索引技术的本质就是利用添加限制条件来减少扫描的数据量,该方法对局部数据库查询有利,但在分布式数据库中由于建立索引较难,所以一般不采用。

5) 查询优化搜索策略:

上述4种方法是查询优化中最常见的方法,它们能够有效的降低查询处理的时间。但是如何有效的应该这些技术来实现一个最优查询方案是十分复杂的。目前查询策略表示主要有两类, 一类是基于图的查询优化,另一类是基于树的查询优化。其中,基于图的查询优化是目前最常用的搜索策略,它的主要思想是通过关系的静态属性计算两个关系的连接代价,依次将图中代价最小的两个站点进行连接合并,直到无法继续合并为止。如果能将查询台与其它优化策略如半连接结合起来,就能实现更加有效的查询。基于树的查询优化主要目的是生成一棵具有最小代价的查询树,并可通过树中连接操作的并行执行来进一步缩短查询响应时间。但由于在树的搜索算法中没有考虑到连接执行后其它边上的代价会发生改变的情况,即没有考虑到当前连接对之后连接的影响,而且所采用的贪婪搜索策略并不能保证最后的总代价一定是最小的。另外,基于树的搜索算法不适于环查询的情况,当查询图中存在环路时基于树的搜索策略无法满足所有的连接限制条件。

目前我们采用的搜索策略主要分为3类,分别是穷尽搜索策略、随机搜索策略以及启发式策略。其中,穷尽搜索策略是列出所有的组合顺序,并进行比较,这样就能找到最佳的查询方案。但该策略的最大缺陷是由于实际运算的复杂度太大,导致该策略部具有实际应用价值。随机搜索策略就是以一个随机状态作为出发点,并与随机选择的相邻状态进行比较,从而获得更加的状态,通过反复比较就能获得近似的最佳情况。该策略的主要优点是算法的空间复杂度较低,满足工程要求,但主要缺点是时间复杂度很难确定。常用的算法有代改进算法、模拟退火算法。其中,启发式策略具有多项式级的时间和空间复杂度,但其生成的可能并不是最优的查询计划,而是一个近似的最优解。这类算法的典型代表有贪婪算法等,常见的有SDD-1算法。

1.2 常见并行数据库查询优化方法

并行数据库的优化方法是目前研究较深入的部分,对整个数据库查询的优化具有重要的研究价值。从大的方面来看,可以分为4类,分别是基于查询树的传统优化方法、多重加权树优化方法、语义查询优化方法以及基于遗传的优化方法。其中,基于查询树的传统优化方法主要包括基于左线性树的查询优化算法、基于右线性树的查询优化算法、基于片段式右线性树的查询优化方法、基于浓密树的查询优化算法和基于操作森林的查询优化算法。多重加权树优化方法够处理最常用的选择一投影一连接查询,支持多种并行连接算法,包括流水线缓冲区的存储器优化分配算法、数据操作的处理机与存储器优化分配算法和连接操作实现算法的优选算法。语义查询优化方法包括传统语义查询优化方法和基于Agent技术的语义查询优化方法。目前研究较多的是基于Agent技术的语义查询优化方法。该方法利用人工智能中的Agent技术来实现并行数据库查询优化的优化。该方法采用Multi-Agent技术自动查找与给定查询有关的完整性约束条件,然后,修改给定的查询为更有效的等价查询,使得多个关系间连接操作的效率得到很大的提高,从而达到查询所期望达到的减少连接操作、缩短查询时间的优化效果,实现了基于Agent的语义查询优化。基于遗传的优化方法是目前发展较快的一种全局优化方法,它借助于生物学的遗传观点。可以明显的提高个体的实用性,从而实现更加的查询优化效果。

曾有学者对上述几类并行数据库查询优化方法进行了系统的比较研究,他得出的结论是基于遗传的优化方法是效率最高的方法。当然,我们也应看到基于遗传的优化方法方法目前还存在算法过程较复杂的缺点,但我们也必须意识到该方法是很有前途的一种方法。

2 结论

随着信息技术,特别是网络技术的快速发展,人们对数据库的效率要求更高,实时数据库领域尤为突出。查询是数据库操作最普通、最常用的操作之一。提高查询的效率就能明显的提高数据库的效率,所以数据库查询优化技术就越发重要了。论文主要从分布式数据库和并行数据库两个方面来论述数据库查询优化技术。在分布式数据库部分,侧重于方法和策略的研究,主要论述了5个方面。在并行数据库部分,侧重实际算法的介绍,主要介绍了4类算法,并指出基于遗传的优化方法是目前效率最高,最有前途的方法之一。

当然,我们也要认识到查询优化的核心就是减少操作的数据量,从而降低处理的代价。所以,我们在研究中,可以引入更多的人工智能、线性控制以及其其它方面的理论来提高优化的效率。同时,我们还有认识到每类优化策略或方法都有其特殊的应用场合,只有合理的应用优化策略才能实现高效的查询效果。我们可以预测随着相关学科的发展,查询优化技术必将获得更大的发展。

参考文献

[1]邵佩英.分布式数据库系统及其应用[M].北京:科学出版社, 2005.

[2].S.Pramanik, D.Vineyard.Optimizing Join Queries in Distributed Databases[J].IEEE, 1988, l4 (9) :1319-1326.

[3]Chiping Wang, O.K.Li, L.P.Chen.Distributed Query Optimization by One-Shot Fixed-Precision Semi-Join Execution[J].Seventh Interna-tional Conference0n Data Engineering, 1991:756-763.

[4]王小平, 曹立明.遗传算法—理论、应用与软件实现[M].西安:西安交通大学出版社, 2002:123-140.

[5]徐丽萍, 金雄兵, 赵小松.并行数据库查询优化技术研究[J].华中科技大学学报 (自然科学版) , 2006, 34 (3) :11-13.

基于ERP的物资档案查询效率研究 第2篇

ERP是Enterprise Resource Planning的英文缩写, 中文含义为企业资源计划, 是在MRPⅡ (制造资源计划) 的基础上发展起来的。ERP是指整合企业内部资源的企业经营管理系统, 包括分销、制造、财务、质量控制、售后服务、人力资源、运输管理等子系统, 体现了物资流信息同资金流信息的集成[1,2]。ERP将企业的运营流程看作是一个紧密连接的供应链, 实现企业业务数据的统一化、协同化, 充分协调企业内外部资源, 其核心管理思想就是通过实现对整个供应链的有效管理, 最终确立企业的全面竞争优势[3,4]。

目前, 企业在开展各项工作以及为生产经营现场提供服务时, 都需要查阅物资管理节点的大量档案资料, 因此档案资料查询效率的提高将直接带来工作效率的提升。本文结合ERP物资模块全过程闭环管理的需要, 通过建立与资产全寿命周期管理相适应的物资管理档案, 建立规范便捷的ERP物资模块档案管理体系, 从而为节省档案查询时间, 节约企业劳动成本。

1 档案资料现状调查分析

ERP需要的投资高技术和经营的风险都很大, 很多优势的发挥需要的因素很多, 比如项目管理因素、领导因素, 外部支持、变革管理、业务流程重组等因素。长期以来, 由于单位人员普遍对档案资料的重视程度不够, 档案资料无专人管理, 也无专门的档案室, 资料保存在各部门的个人手里, 档案资料没有科学的分类, 使得查找档案时非常不便, 查找起来十分浪费时间和人力, 甚至发生过资料缺失的现象, 给我们的工作带来很大的麻烦。

我们通过统计正常使用资料档案的查找时间, 以5天为期限, 将小组成员在这5天内所查找资料的用时情况做一详细记录。记录结果显示, 小组共有5人参与查询资料统计, 5天内共计查询资料15次, 共用2192秒, 平均查询时间约为145.5秒, 平均查找时间超过2分钟, 严重影响了工作效率。

2 资料档案影响主要原因

2.1 要因确认

通过调研, 我们可以看到硬件和方法的要因主要表现在资料分类不科学、查询流程不优化、制度不健全、无专用档案室、电脑、档案橱、资料存放随意、无专人负责等。硬件和方法的要因确认见表1。

2.2 要因论证

ERP具有资源整合, 系统运行的集成化, 软件的跨域非常大的特点, ERP是一项具有创新性的工程, ERP的实施需要很好的外部资源条件和自身制度的完善[5]。

2.2.1 资料分类不科学

以前的资料种类繁多, 立建资料也无科学的依据, 有的资料根本用不着, 为物资管理节点提供重要证据的某些资料反而不规范或根本没有, 尤其是ERP单轨运行后, 资料的分类不适应ERP物资模块全过程闭环管理的需要这一现象表现的越来越明显, 以上种种直接导致了资料的查询工作效率低。

2.2.2 查询流程不优化

表现为查询资料先要到分管部门, 再找到分管人, 由分管人查找该资料, 并且也没有使用电脑化操作这一先进工具, 造成了查询速度慢, 导致了工作效率低。

2.2.3 档案不健全

以前没有专门的档案管理制度, 无法规范档案的整理、保管和借阅工作, 造成了档案不能按时归档, 有时甚至会因为保管不当或没有履行借阅手续造成资料丢失, 导致了资料查询速度慢, 甚至根本查不到。

2.2.4 无专用档案室、电脑、档案橱

ERP是利用信息技术获得所需要的资源, 是一种行业中的管理软件, 对电脑的需求量很高。以前的硬件投入不够, 没有存放、整理及查阅资料用的专用档案室、档案橱、电脑, 档案资料的定值化管理和微机化操作也就谈不上, 造成了查询资料的效率低。

2.2.5 资料存放随意

资料保管在各部门的个人手里, 存放无固定地点、杂乱无序, 造成了资料查询的速度非常慢。

2.2.6 无专人负责

表现在各个部门的资料分管人各自整理、保管自己的那部分资料, 每个人还有各自的业务工作, 工作一忙起来根本顾不上资料整理工作, 造成了资料管理工作的粗放无序, 也导致了资料查询效率低。

3 问题分析与对策建议

3.1 针对资料分类不科学

企业中的ERP的绩效评价指标根据ERP应用系统的不同和实施企业的特点不同而设计不同, 企业设计的ERP项目根据不同的因素而不同, 关键成功因素的选择, 绩效指标选择合理对设计的ERP科学与否至关重要[6]。为了适应ERP物资模块全过程闭环管理的需要, 我们规范了档案整理立卷的办法, 将物资计划管理的档案分成了12大类, 每一大类按年度月份立卷, 具体类别为:物资计划、谈判资料、中标通知、技术协议、核价单、合同、自购出入库单、出入库单、供应商、废旧物资计划、废旧物资回收、废旧物资拍卖等12大类, 每一大类资料存放在一个资料橱内, 资料橱按以上顺序摆放, 查找起来十分快捷方便。

3.2 针对查询流程不优化

针对以前查询流程落后低效的问题, 我们创新了三种高效的查询流程, 具体如图1所示。

上述三种流程由于引进了先进的定置化管理理念, 使用了先进的微机、索引软件及超级链接等电子化查询方法, 大大提高了资料的查询速度。

ERP单轨运行后, 大部分物资管理工作都是在线上 (即ERP系统中) 完成的, 产生的资料如物资计划、物资合同、出入库单等也同时被保存在系统中, 这也使通过超级链接查询资料的电子版本这一工作变得高效快捷, 同时由于只有ERP注册用户才能进入ERP系统, 这也就保证了资料的可靠性和安全性。

3.3 针对制度不健全

我们制订了适应ERP物资模块全过程闭环管理的档案管理制度, 并得到了中心领导的同意下发, 档案工作本着统一保管, 分级整理的原则, 明确各级人员的职责, 形成了公司上下人人都能认识到基础档案资料的重要性, 全员热心齐抓共管的良好氛围, 从而保证了资料整理的质量, 避免了人为原因造成的资料丢失, 也使得资料查询效率得以提高。

3.4 针对无专用档案室、电脑、档案橱

为了提高资料查询工作的效率, 我们注重在硬件上的投入, 建立健全设施设备:为了适应ERP档案管理的需要, 我们设立专门的档案室, 添置了专用的档案装订机, 购置了美观的档案柜和资料盒, 配备了微机和专用钥匙盒, 从硬件上保证了档案管理的井井有条, 电脑化操作一目了然, 这也保证了资料查询工作的高效便捷。

3.5 针对资料存放随意

我们采用了先进的定置化管理理念, 在档案室内配备有定置图和档案柜钥匙盒, 钥匙盒内钥匙贴有档案标签, 档案柜正面和档案盒侧面也分别贴有标签, 定置图、钥匙、档案柜、档案盒互相对应, 按年度月份立卷的档案前附有卷内目录, 档案室电脑里备有档案索引和目录, 查阅起来一目了然, 非常方便。

4 结论

经过几个月的研究与分析, 我们再次对物资资料进行查询, 查询资料15次, 共用516秒, 平均查询时间34.4秒。与原来相比, 使用该方法资料查询效率提高了3.2倍, 我们整个中心的工作效率至少能提高4%, 也就是我们至少能节约1个人的人工成本, 每年带来的效益可达10万元。另外, 由于开展了高效规范的档案管理工作, 公司的对外形象也得到了提升。

ERP的应用非常复杂, 其技术能够让行为管理和流程控制很好的结合起来, 在实施应用ERP技术时, 要按照企业的制度要求, 要立足创新, 必要时可以请专业公司进行咨询。通过利用ERP管理手段, 我们创造性地解决了工作中的实际问题, 取得了预期效果, 我们在质量意识、个人能力、解决问题的信心、团队精神等方面均得到有较大提高, 增进了我们继续学习的能力。结合工作实际, 我们认为, 在以下三个方面仍需要加强:

(1) 继续加大宣传力度, 提高全员对档案管理工作重要性的认识, 加强有关人员档案整理知识的培训, 使我们的档案管理工作变得更加规范、高效。

(2) 加强相关人员ERP操作技能和资料查询流程的培训工作, 进一步提高物资管理工作的效率。

(3) 由于我们是集团公司范围内第一家建立ERP物资管理专用挡案室的单位, 许多单位来参观学习, 我们正在把经验加以推广。

摘要:针对目前单位对档案资料的管理重视程度不够, 档案资料无专人管理, 资料保存过于分散和档案资料分类不科学等问题, 本文通过ERP物资管理模块全过程闭环管理, 解决了档案查询效率低的问题。

关键词:ERP,物资管理,档案查询,效率

参考文献

[1]邹明信.ERP项目实施可行性分析研究[J].中国制造业信息化, 2006, (9) :5-7.

[2]解梁军.关于企业ERP项目的实施与探索[J].长春大学学报, 2006, (11) :22-23.

[3]郭外萍.企业ERP项目实施风险分析与控制方法探讨[J].商场现代化, 2007, (11) :140-141.

[4]陈志祥.我国企业ERP系统实施问题探讨[J].中国软科学, 2001, (12) :58-61.

[5]郭俊华, 唐元虎.我国企业实施ERP系统的现状与对策[J].科学管理研究, 2001, (12) :47-50.

数据库查询优化策略研究 第3篇

查询效率往往和关系模式所处的范式等级密切相关, 在数据库设计阶段中, 不好的关系模式往往容易带来如下几个问题:数据冗余太大、插入异常、删除异常、更新异常。按照关系模式满足实际需求程度的不同, 可将关系模式分为不同等级, 即:1NF、2NF、3NF、BCNF、4NF、5NF, 这几个范式可以在不同程度解决上述问题。

一个较低范式的关系模式, 可以通过模式分解转换为若干个高一级范式的关系模式的集合, 此过程即是关系模式的规范化过程。规范化理论的基本思想是逐步消除不合适的数据依赖, 让其中关系的概念更确定和单一。具体来说, 从1NF到5NF是一个逐渐消除非主属性对码的部分函数依赖和传递函数依赖、消除主属性对码的部分函数依赖和传递函数依赖、消除非平凡且非函数依赖的多值依赖、消除连接依赖的过程。

需要注意的是, 规范化理论虽然为数据库设计提供了理论指导, 但并不是规范化程度越高, 模式就越好。例如:规范化程度越高, 虽然对降低数据冗余和消除数据异常有好处, 但由于关系被分解得更细, 当查询要用到两个以上关系模式的属性时, 就会因为连接运算而付出较高的代价, 反而会降低查询的效率。所以在设计过程中, 必须结合实际需要和应用环境, 为关系模式选用合理的范式等级。

2 索引的优化

索引是一种数据结构, 通过对数据表中一列或多列的值排序, 从而提升数据查询效率。但当对数据表进行增加、删除和修改数据的时候, 索引也需要发生相应变化即还需要动态维护索引, 因此使用索引会降低数据的更新速度。在数据库的设计过程中, 既要注意利用索引来提升查询效率, 同时也要考虑索引的维护代价, 因此, 应该遵从创建索引的一些原则。

(1) 索引要建立在经常需要查询的列上因为经常需要查询的列对索引利用率高。

(2) 在经常需要根据范围进行查询的列上要创建索引, 因为索引已经排序, 则根据范围进行查询时效率更高。

(3) 对查询中经常需要进行G R O U P BY、ORDER BY的列上建立索引, 这样可以加快查询的分组和排序的时间。

(4) 不应在数据值很少的列上创建索引。因为此种情况索引并不能显著提高查询速度。

(5) 不应在经常需要存取的列上创建索引, 因为在经常存取的列上建立索引会付出较大的维护代价。

3 查询语句的优化

从大多数数据库来看, 查询语句往往消耗了大部分的数据库资源, 如果对查询语句进行优化, 则可以大大提升数据库的性能。此外, 查询语句独立于程序设计逻辑, 相对于程序源代码的优化, 对查询语句优化的风险和时间成本会更低, 所以, 对查询语句进行优化具有重要的意义。以下是对查询语句进行优化的几条原则。

(1) 将最具有限制性的条件放在前面, 大值在前, 小值在后。

如“WHERE a<=10000 AND a>=1”效率高, 而“WHERE a>=1 AND a<=10000”效率低。原因就在于虽然这两个表达式表达的是同一个意思, 但因为“a<=10000”比“a>=1”具有更强的限制性, 所以具有更高的效率。

(2) 避免采用通配符匹配查询。

通配符匹配查询特别耗费时间。即使在条件字段上建立了索引, 在使用通配符匹配查询的情况下也还是采用顺序扫描的方式。解决办法是可以考虑将通配符表达式转化成等价的不等式, 则在执行查询时就会利用索引来查询, 这样就会大大的提高查询速度。

(3) 避免相关子查询。

一个列如果同时在主查询和WHERE子句中的查询中出现, 那么很可能当主查询中的字段值改变之后, 子查询必须重新查询一次。查询嵌套层次越多, 效率越低, 因此应当尽量避免子查询。解决办法是可以考虑将子查询改为用“AND”来表达的等价表达式, 这样就可以有效避免相关子查询, 提高查询效率。例如:将语句“SELECT s1, s2 FROM Ta WHERE s3 IN (SELECT s3 FROM Tb WHERE Tb.num=100) ”改为“:SELECT s1, s2 FROMTa, Tb WHERE Ta.s3=Tb.s3 ANDTb.num=100”。

(4) 消除对大型表行数据的顺序存取。

在嵌套查询中, 采用顺序存取策略将可能严重影响查询效率。比如采用顺序存取策略, 一个嵌套3层的查询, 如果每层都查询1000行, 那么这个查询就要查询10亿行数据。解决办法是对连接的字段进行索引, 此外还可以使用并集来避免顺序存取。

(5) 使用临时表加速查询。

合理使用临时表可以有效提升查询效率。以下两种情况可使用临时表提高查询效率。

(1) 当某一个SQL语句关联的表在两张及以上, 并且和一些小表关联。可以采用将大表进行分拆并且得到比较小的结果集合存放在临时表中。

(2) 当程序执行过程中可能需要存放一些临时的数据, 这些数据在整个程序的会话过程中会用到。

在使用临时表的过程中需要注意的是:临时表创建后不会反映主表的修改。在主表中数据频繁修改的情况下, 注意不要丢失数据。

(6) 字段的提取应采取“按需提取”的原则。

本原则要求查询语句应避免“SELECT*”, 而应根据实际需要提取字段。如果在结果中只需要显示字段“s1, s2, s6”, 则应写成“SELECT s1, s2, s6”, 这样可以省去不相关字段的查询时间。

4 结语

本文针对数据库查询优化所面临的若干重要问题进行了分析, 提出了一些数据库查询优化的基本原则。数据库设计者必须从实际需要出发, 综合考虑各方面的因素, 才能最大限度地提升数据库的整体性能。

参考文献

[1]王珊, 萨师煊.数据库系统概论 (第4版) [M].北京:高等教育出版社, 2006.

[2]樊新华.关系数据库的查询优化技术[J].计算机与数字工程, 2009, 37 (12) .

[3]郭忠南, 孟凡荣.关系数据库性能优化研究[J].计算机工程与设计, 2006, 27 (23) .

数据库查询优化策略探究 第4篇

关键词:DBMS,查询优化,优化策略

数据库技术作为信息管理系统的核心技术, 在信息处理领域越来越受到重视。在数据库系统的各种操作中, 其中数据库的查询操作是其核心操作, 是最重要的, 也是最复杂的。SQL (Structure Query Language) 作为国际标准的数据库查询语言, 其核心功能就是查询技术。目前主流的DBMS均支持SQL语言或者有与SQL的接口软件。所以, SQL语句的执行性能的高低直接影响着数据库应用系统的运行效率。因此, 优化SQL查询语句, 可以节省数据查询操作的时间和空间, 提高效率。

一、实现DBMS查询优化的常用策略

数据库查询优化的总目标是:选择有效的策略, 求的给定关系表达式的值。关系运算理论是SQL语言的理论基础。关系代数语言是以集合操作为基础的语言。查询优化的步骤为: (1) 首先, 给出SQL语句后, 查询优化器对查询语句先需要做代数优化和存取路径的优化。 (2) 其次, 由预编译模块对语句进行处理并生成查询规划。 (3) 最后, 在合适的时间提交给系统处理执行。也就是由DBMS确定合理的有效的查询策略, 这称为DBMS的查询优化。查询优化一般会常用以下几种优化策略:

(一) 应尽可能先做选择运算, 以得到较小的中间结果。

这是查询优化策略中最重要也是最基本的一条。选择操作就是根据选择条件对关系做水平分割, 即选取符合条件的元组 (记录) 。先做选择操作, 可以大大减少中间结果, 减少运算量, 后面其他运算的运算时间也大大减少。

(二) 在执行连接操作的时候, 首先对关系进行预处理。

预处理的一般方法就是对关系建立合适的索引或者排序。现在的DBMS一般都是采用索引的方法。索引是数据库操作中重要的数据结构。其使用原则如下: (1) 在经常进行连接但没有指定为外键的列上建立索引, 这样的列一般是关系中的关键字, 而不经常连接的字段则由优化器自动生成索引。 (2) 在频繁进行分组group by操作或排序order by操作的列上建立索引。 (3) 在条件表达式中经常用到的重复值较少的列上建立索引, 在重复值较多的列上不要建立索引。如果在重复值较多的列上建立索引, 不但不会提高查询效率, 反而会严重降低更新的效率。 (4) 如果是多关键字排序, 可以建立复合索引。

(三) 对同一个关系进行的选择运算和投影运算应该尽量的同时进行。

如果选择和投影运算都是针对同一个关系的, 可以对关系连续做一串操作, 即同时计算一连串的选择和投影操作, 以免多次扫描文件, 从而节省时间。

(四) 对关系的一个子集排序并且创建临时表, 能加速查询。

创建临时表有助于避免多重排序操作, 还能简化优化器的工作。临时表是主表的子集, 其行和列要比主表中的行和列少, 而且元组物理顺序就是所要求的顺序, 减少了磁盘输入输出操作, 所以查询工作量可以得到大幅减少。在SQL中, 临时表的建立一般是通过建立视图的方法来实现。需要注意的是:临时表创建后不会反映主表的修改, 在主表中数据频繁修改的情况下, 应该经常更新视图, 以防丢失数据和数据错误。

(五) 应尽量避免对大型表的顺序存取。

在嵌套查询中, 大型表的顺序存取对查询效率可能产生致命的影响。避免这种情况的主要方法就是对连接的列建立索引, 按照索引路径来完成连接运算, 从而可以大大降低连接运算的执行代价。

二、实现SQL语句查询优化的常用方法

SQL语言作为一种非过程化的查询语言, 用户仅表达查询的要求, 而不必描述查询的过程。要想设计高性能的SQL语句, 首先要做到三点: (1) 熟悉所用的DBMS优化器的优化策; (2) 深入理解数据库中的数据; (3) 透彻的分析用户的需求。然后在此基础之上, 才能尝试编写效率最高的SQL语句, 优化程序设计。完整的SQL语句有5个子句构成。其格式如下:

SELECT目标表的列名或列表达式序列;

FROM基本表或视图序列;

WHERE行条件表达式;

GROUP BY列名HAVING分组条件表达式;

ORDER BY列名ASC/DESC;

在SQL语句中, 通过优化各个子句的方法, 同样可以提高查询效率, 下面是在数据库中常用的一些提高SQL语句性能的方法。

(一) SELECT子句的优化方法。

当需要在SELECT子句中列出关系中所有的列时, 使用*是一个很方便的方法, 但是, 这种方法的执行效率很低, 因为在解析这类语句时, 优化器首先要查询数据字典, 将*转换成所有的列名, 这个过程将花费较多的时间, 所以要尽量避免*的使用。

(二) WHERE子句的优化方法。

1. 合理设置WHERE子句中的条件顺序。

因为大部分的SQL语句解析器解析语句的循序都是自上而下的, 所以条件的循序应该是:表和表之间的连接条件必须写在其他条件之前, 而那些可以过滤掉最大数量元组的条件则必须写在WHERE子句的末尾。如果按照条件限制的严格程度设计WHERE子句, 则需要将条件限制最严格的部分放在末尾, 而将条件限制最不严格的部分放在顶部。

2. WHERE子句中对列的任何操作都将导致对表扫描。

如, SELECT*FROM student WHERE substr (sno, 1, 4) =“2006”应改为SELECT*FROM student WHERE sno LIKE“2006%”。应当避免对WHERE子句中的条件参数使用其他数学操作符, 如果WHERE子句中存在一个代数表达式, 那么优化器就不能使用分布统计信息。

3. 避免使用困难的正规表达式。

所谓正规表达式, 是指在SELECT查询语句中LIKE关键字支持的_和%通配符匹的使用。但实际的执行中, 这种正规表达式的匹配非常耗时, 如上例从Student表中查询2006级所有学生信息, 即使在Sno列上建立了索引, 优化器还是会采用顺序扫描方式处理该SELECT语句。可以把SELECT语句改为如下形式:SE-LECT*FROM Student WHERE Sno>‘2006000000’AND Sno<‘2007000000’, 去掉通配符的使用, 改用关系表达式给出条件, 则优化器就会利用索引来执行查询, 显然会大大提高查询速度。

4. 在WHERE子句中应使用子查询时尽量使用EXISTS (NOT EXISTS) 而不是IN (NOT IN) 。

在子句中可以使用两种格式的子查询:第一种格式是使用操作符:Where xi IN (WHERE……….) ;第二种格式是使用操作符:Where xi EX-ISTS (WHERE……….) 。使用EXISTS (NOT EXISTS) , DBMS系统的执行循序是:首先检查主查询, 然后运行子查询直到找到第一个匹配项。这样就节省了时间。如果使用IN (NOT IN) 子查询, 则系统先将主查询挂起, 首先执行子查询, 并将获得的结果列表存放在一个加了索引的临时表中, 待子查询执行完毕, 存放在临时表中以后再执行主查询。因此。使用EXISTS (NOT EXISTS) 要比使用IN (NOT IN) 查询速度快。因此, 在WHERE子句中使用子查询时, 应尽量使用EXISTS (NOT EXISTS) 而不是IN (NOT IN) 。在写SQL语句的时候, 同样也应该尽量用UNION而不是OR操作符, 这样也会起到加快查询速度的作用。

5. 用WHERE子句代替HAVING子句。

HAVING子句很有用, 但是用起来要付出很大的代价。因为HAVING子句的执行将导致SQL语句优化器的额外工作, 从而花费额外的时间, 所以应当尽量避免使用HAVING子句。HAVING子句和WHERE子句类似, 都能根据条件对关系进行筛选.但HAV-ING子句必须配合GROUP BY来进行筛选, 否则没有任何意义, 但WHERE子句可以不带GROUP BY。WHERE子句HAVING子句的执行顺序也略有不同:WHERE子句先根据条件对记录进行过滤而形成结果集, 然后再进行分组 (如果带有GROUP BY) 。而HAVING子句则首先要通过GROUP BY检索出所有记录, 然后才根据条件对结果进行过滤, 其处理过程中还用到排序、总计等操作。所以, 如果能用WHERE子句来代替HAVING子句, 则能较好的减少系统的开销, 提高SQL语句的执行效率。

(三) ORDER BY子句的优化方法。

在ORDER BY子句中, 不要有非索引项或者计算表达式。ORDER BY语句决定了DBMS如何将返回的查询结果排序。在ORDER BY语句中, 如有非索引项或计算表达式, 则将降低查询速度。

(四) 其他优化方法。

利用SQL语句查询, 还有一些优化方法, 例如:合理使用索引, 尽量避免使用排序;简化或避免对大型表进行重复的排序;避免对查询的列使用数学运算;使用临时表加速查询等等。

三、结语

总之, SQL优化的实质就是在结果正确的前提下, 用优化器可以识别的语句, 尽量减少类型转换和计算, 充分利用索引, 减少表扫描的I/O次数, 尽量避免表搜索的发生。查询优化是一个复杂的问题。随着数据库技术的广泛应用, 理解关系数据库查询优化的实现方法, 书写合理的查询计划, 借助于关系数据库查询优化的新技术, 可以使数据库应用系统的性能得到更大程度的提升, 人们的工作效率得到进一步提高。

参考文献

[1].萨师煊.数据库系统概论[M].北京:高等教育出版社, 2004

[2].[美]Microsoft公司著.SQL Server2000资源大全[M].北京:机械工业出版社, 2002, 2

[3].陈建荣, 叶天荣.分布式数据库设计导论[M].北京:清华大学出版社, 1993:86~89

上一篇:悲悯情怀下一篇:英语教研室