数据库查询优化之我见.doc

上传人:99****p 文档编号:1948458 上传时间:2019-03-24 格式:DOC 页数:5 大小:25.50KB
下载 相关 举报
数据库查询优化之我见.doc_第1页
第1页 / 共5页
数据库查询优化之我见.doc_第2页
第2页 / 共5页
数据库查询优化之我见.doc_第3页
第3页 / 共5页
数据库查询优化之我见.doc_第4页
第4页 / 共5页
数据库查询优化之我见.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、数据库查询优化之我见摘要:本文重点围绕数据库的查询优化,从设计、管理和使用三方面着手,针对如何缩短大数据量的查询处理时间和提高数据库应用系统效率的问题,提出了相应的优化策略。本文首先分析了规范良好的数据库系统的设计对优化的影响;然后介绍了如何通过数据库的基本管理达到优化的目的;最后分析编写恰当的 SQL 语句进行优化的通用策略和原则,通过相应的解释加深读者对这些策略和方法的理解。 关键词:数据库;优化;查询 一、引言 由于数据库技术的不断创新和发展,数据库技术被越来越多的应用,而且也不断地开发出新的数据库应用系统和信息管理系统。而在数据库应用系统和信息管理系统的众多功能里面,必不可少的一向功能

2、就是查询,查询功能也是数据库系统和信息管理系统中占最大比例的功能。数据库的查询功能对于整个数据库系统的效率有很大的影响,优化好的查询功能可以有效的提高效率,由此可见查询优化规划的重要性。只有从需求、设计到使用等环节都做好相应的规划和技术改进,才能最大程度的优化整个数据的查询功能。 二、数据库设计优化 数据库的设计是否优良从根本上决定了数据库查询效率的好坏,因此要提高数据库的查询效率首先就应该从数据库需求分析阶段入手。 1.详细的需求分析是优化的基础 数据库设计是从系统的需求出发,结合软硬件相关要求,设计符合系统需要功能的数据的集合。数据库模式的设计是数据库设计中最基本的环节,可以使用 E-R

3、图对数据库模式的设计进行建模。但是,往往需要经历一个反复且周期性的过程才能完善的设计出一个较为优秀的数据库系统。 2.数据库规范化是优化的关键 逻辑结构设计在数据库的设计周期中是必须要开展的,在这一设计中,为了达到优化数据库的目的必须规范关系模式。所谓关系规范化就是按统一标准对关系进行优化,从而最大程度上消除关系数据库中的数据冗余,消除添加、删除和修改等操作异常,以提高关系的质量。冗余度大、插入异常和删除异常是在操作不好的关系时经常会遇到的三个问题。在规范化理论中,关系中的各属性被认为是相互依赖和相互制约的,这样一个有严谨结构的整体才能构成。函数依赖、多值依赖和连接依赖三种类型大致就是参照属性

4、间相关的关系而分类的,其中按照函数依赖又可分为部分依赖、完全依赖和传递依赖。根据这三类函数依赖可得到规范化等级,主要有 5 种,即第 1 范式(1NF) ,第 2 范式(2NF) ,第 3范式(3NF) ,BC 范式(BCNF)和第 4 范式(4NF) ,满足这些范式条件的关系模式可在不同程度上避免冗余、插入和更新异常问题。 三、数据库管理优化 当我们选定数据库管理软件,完成数据库的实现后,通过建立索引、存储过程等数据库管理手段可以进一步为提高数据库的查询效率打下基础。 1.合理使用索引 索引是数据库中重要的数据结构,提高查询的效率是设计索引的根本目的。索引的使用要恰到好处,其使用原则如下:在

5、经常进行连接,但是没有指定为外键的列上建立索引,而不经常连接的字段则由优化器自动生成索引。在频繁进行排序或分组的列上建立索引。在条件表达式中经常用到的不同值较多的列上建立检索,在不同值少的列上不要建立索引。比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。如果待排序的列有多个,可以在这些列上建立复合索引(compound index) 。 2.使用存储过程 存储过程是 SQL 语句和流程控制语句的集合,经编译后存储在数据库中。用户通过指定存储过程名字并给定参数来执行它。如某一操作包含大量的 SQL 代码或分别

6、被多次执行,那么存储过程的执行速度快很多。因为存储过程是预编译的,只在创建时进行编译,以后每次执行存储过程都不需要重新编译,而一般 SQL 语句每执行一次就要编译一次,所以使用存储过程可提高数据库的运行效率。另外,存储过程保存在数据库中,比起从客户端发送 SQL 语句到数据库服务器,使用存储过程节省了网络传输的时间,这一定程度上提高了数据库的执行效率。 四、SQL 语句优化 通过以上手段固然能有效的提高查询效率,但功能正确而编写不恰当的 SQL 语句同样能降低数据库的查询效率。以下就如何编写优良的 SQL语句做介绍: 1.在进行查询时,返回的值应该是查询所需要的,即在查询中应该尽量减少对数据库

7、表的访问列数,使查询返回的数据最小。这就意味着在查询时,不能过多的使用通配符,如:select*from table1 语句,而应该做到最小化查询范围,要查询几列就选择几列,如:select col1 from table1。 2.多数情况下,当用户并不需要查询到的所有数据,而只是部分或靠前的数据时,这时我们可以通过 SQL 语句来限制查询的结果,如:select top 50 col1 from table1。 3.对于一些特殊的 SQL 语句,在使用时应正确选择。我们用一组例子来说明,如:EXISTS,NOT EXISTS。语句一:select sum(t1.c1) from t1 whe

8、re (select count(*)from t2 where t2.c2=t1.c2)0。语句二:select sum(t1.c1) from t1 where exists(select*from t2 where t2.c2=t1.c1) 。两个语句所得到的结果相同,但语句二的效率要远高于语句一,因为语句一在查询中产生了大量的索引扫描。在对数据库查询时,所使用的语句多种多样,但选择恰当的字句能够有效的提高查询效率。 4. WHERE 子句在使用时应该注意以下的问题:在 WHERE 子句中对字段进行 null 值判断,如:select id from t1 where name is n

9、ull,使用 in、not in、or、!= 或,都会导致索引失效而进行全表扫描。可以使用 exist 和 not exist 代替 in 和 not in。 5.充分利用“查询分析优化器” 。以下两个语句是等效的:select * from table1 where name=zhangsan and tID 10000 和 select * from table1 where tID 10000 and name=zhangsan。SQL SERVER 中有一个“查询分析优化器” ,它可以计算出 where 子句中的搜索条件并确定哪个索引能缩小表扫描的搜索空间,也就是说,它能实现自动优化。

10、会导致“查询分析优化器”失效的 SQL 操作有,or、NOT、!=、 、!、NOT EXISTS、NOT IN、NOT LIKE 等。 6.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,这将导致引擎放弃使用索引而进行全表扫描。如:查询 name以 abc 开头的 id 的语句 select id from t where substring(name,1,3)=abc可以改为 select id from t where name like abc%。 (作者单位:广安职业技术学院) 参考文献: 1徐慧.数据库技术与应用.北京:北京理工大学出版社,2010 2(美)克罗恩克等著, 姜玲玲等译.数据库原理.北京: 清华大学出版社,2008

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。