本论文是一篇关于数据库方面本科毕业论文,关于基于局域网的数据库查询优化相关硕士论文范文。免费优秀的关于数据库及信息系统及语句方面论文范文资料,适合数据库论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。
摘 要:本文从局域网实际情况出发,为达到提高数据库查询效率和减少数据传输总量的目标,提出了23种具有可操作性的数据库查询优化方法和相关建议,对局域网数据库查询具有帮助意义.
关 键 词:SQL;查询;数据库;优化
中图分类号:F326.13文献标识码:A文章编号:1007-9599(2012)01-0000-02
LAN-basedDatabaseQueryOptimization
HongJing,HeLang
(ChongqingNankaiSecondarySchool,Chongqing400030,China)
Abstratc:Thistextsetoutfromthelocalworkactualcircumstance,forattainanexaltationdatabasesearchefficiencyanddecreasethedatadeliverthetargetoftotalamountandputforward23kindsofdatabasewhichhavemaneuverabilitysearchexcellentturnamethodwithrelatedsuggestion,playchessanareaadatabasesearchhelpfulmeaning.
Keywords:SQL,Search,Database,Optimization
一、引言
随着信息时代的到来,大量信息系统在人们日常生活中的广泛运用,有很多单位与企业、学校内部都建立了大量的信息系统.在有限的硬件资源条件下,基于WEB的信息系统运行所遇到的最大瓶颈问题就是大量对数据库的查询操作.而数据库的优化查询算法应该是开发这些系统时应该考虑的内容.
SQL查询语句的优化一直是大家研究的问题,因为这是对数据库的操作中最耗时的工作.虽然不同的查询方案可能某一条SQL语句执行一次的速度相差不大,但是对访问量较大的WEB系统来说,有可能这一条语句一天就要执行成千上万次,累计起来的时间相差就大了.另外,从成本优化的角度出发,每条SQL语句都应该被单独优化,程序员对SQL语句的优化往往可以使查询效率成倍提高.而且,对数据库查询的次数越少,读取数据库存储磁盘次数就越少,就可以延长服务器的使用寿命.下面,根据我参加IBM暑期培训班学习使用数据库的体会和对SQL语句查询研究,下面探讨一下局域网的数据库查询优化.
二、优化目标
在明确优化目标之前,我们应该首先解决为什么要对SQL查询语句进行优化的问题,在实际情况下,往往有一些诸如数据库设计缺陷、用户访问量的急剧增长和增加系统功能模块对数据库结构及功能的影响等需求.
对一个WEB系统,有两个概念是必须关注的:吞吐量和对用户请求的响应时间.这是一对矛盾的两个方面,而在同一个系统中,我们希望吞吐量和对用户请求的响应时间都能达到最佳,这就是对数据库查询进行优化的目标.在一个系统的硬件资源不变的情况下,增加系统的吞吐量往往就会使系统对用户请求的响应时间变长,导致用户需要等待更长的时间才能获得所需要的数据;而如果想减少系统对用户请求的响应时间,这将直接导致系统的吞吐量下降.例如:在组织一次全校学生的期末考试时,当多个用户同时登录网络考试系统,部分用户就会出现网页打开速度很慢,或者根本就打不开的现象,这就是突然间系统访问量急剧增加,数据库访问量同时也大增的结果,但系统的硬件资源并没有变化.所以,这时对系统数据库的查询进行必要的优化就显得尤为重要.
三、优化方案
对一个数据库系统进行优化不是某一条语句就能影响的,而是要对系统的所有SQL语句进行优化设计,是一个系统工程,需要有一整套解决方案.总体来说,对SQL语句进行优化可以从以下23个方面进行优化.
1.首先要尽量避免全表扫描,这是最耗系统资源也最笨的查询方式.如果一定要对全表进行扫描,就应考虑在where及orderby涉及的列上建立索引.
2.要慎用关键字in和notin,否则也会导致全表扫描.
例如:要查看考试科目成绩在及格线边沿(58、59、60、61)的学生姓名,SQL语句可以写为:
select姓名from学生表where考试科目成绩in(58,59,60,61)
对于像这种连续的数值,能用between就不要用in.所以,上面的语句可以改写为:
Select姓名from学生表where考试科目成绩between58and61
3.关键字like也要注意慎用,否则也会导致全表扫描.
例如:要查询学生姓名中含有“张”的所有学生姓名,SQL语句可以写为:
Select姓名from学生表where姓名like'%张%'
这种情况下,若要提高查询效率,可以考虑使用全文检索.
4.在where子句中使用参数,同样会导致全表扫描.这是因为SQL语句是在运行时解析局部变量.所以,要优化该子句就应将其改为在编译时选择.但是,如果在编译时建立访问计划,这时变量的值还是未知的,也无法作为索引选择的输入项.
例如:查询考试科目成绩为90分的学生姓名,SQL语句可以写为:
Select姓名from学生表where成绩等于90
在执行该语句时,将导致数据库引擎对“学生表”所有行进行扫描查询.这时,可以将SQL语句改为强制查询使用索引:
Select姓名from学生表with(index(索引名))where成绩等于90
5.尽量避免不要在where子句中的“等于”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引.
6.在使用where关键字时,应尽量不要在子句中对字段进行表达式操作,这也会导致数据库引擎放弃使用索引而进行全表扫描.
例如:查询考试科目成绩的一半等于30分的学生姓名,SQL语句可以表达为:
Select姓名from学生表where成绩/2等于30
这篇论文来自:http://www.sxsky.net/benkelunwen/060367398.html
对这种表达式语句,可以改写为:
Select姓名from学生表where成绩等于30*2
7.在where语句中要尽量避免对某一字段进行null值判断,否则将导致数据库引擎放弃使用索引而进行全表扫描.
例如:如果要查询考试科目成绩为0的学生姓名.
select姓名from学生表where考试科目成绩isnull
这时,可以将“考试科目成绩”字段默认值设置为0,然后就可以这样查询:
select姓名from学生表where考试科目成绩等于0
怎样撰写数据库本科论文
播放:22163次 评论:4889人
8.在where语句中要尽量避免使用<>或!=等逻辑判断操作符,否则也将导致数据库引擎放弃使用索引而进行全表扫描.
9.在where语句中要尽量避免使用or来连接需要查询的条件,否则也将导致引擎放弃使用索引而进行全表扫描.
例如:要查询考试科目成绩为60或70的学生姓名,SQL语句可以写为:
select姓名from学生表where考试科目成绩等于60or考试科目成绩等于70
这时,可以用union来连接两个查询条件,于是,上面的语句可以改写为:
selec