基于SQL Server 的数据库应用系统性能的优化

出处:电子爱好者博客 发布于:2013-07-31 15:05:03

  摘要:SQL Server 数据库在实际的运用中,往往会出现数据量过大的情况,如果不采取有效措施,就会导致系统性能不稳定,出现连接超时、长时间等待和阻塞等情况。因此,我们从数据库的设计以及SQL 语句等方面入手,论述了SQL Server 数据库应用系统性能的优化。

  0 引言

  由于SQL Servers 数据库管理系统具有较高的数据管理性能,因此被广泛应用于服务器和客户体系结构中。其系统的吞吐量、响应时间以及并行处理能力,对于SQL 发生请求之后显示返回结果的速度,以及在屏幕上含有数据时切换不同屏幕的速度等,这些方面都是SQL Server 数据库性能的表现。我们在这里主要论述了SQL Server 数据库的这些性能要注意的问题以及相关的优化方法。

  1 优化SQL Server 数据库的设计

  1.1 优化数据库事务

  多个SQL 语句组成了SQL Server 数据库的事务的逻辑单元,数据库服务器执行着事务的控制和处理,应用程序则划分了数据库事务的起点和终点。在使用数据库时,应尽量缩短数据库的事务,事务短了,则其通过SQL 语句占用获得的回滚空间和锁就可以得到尽快释放,从而降低SQL Server 数据库系统在并发处理时的资源竞争。

  1.2 优化返回信息量

  查询大量数据会大大增加数据服务器的负担,因此用户在进行自定义条件查询过的时候,如果表的数据量过大,则应该要设定一个条件,以避免系统返回过多的信息量,导致DMNS 的性能下降。系统返回大量数据会增加网络通信量,从而造成网络的拥挤,而如果客户机的内存不足,返回信息量严重超载,则会造成严重的错误。

  1.3 优化访问次数

  当应用程序要对类似或者相同的数据,例如代码表这些数据进行反复操作的时候,可以从数据库上性将数据检索并到客户机的缓存中,采取数据共享的技术对储存好的数据进行反复使用。或者原数据窗口有事先储存好的数据,可以直接加以利用,而不用再去检索服务器。通过减少对数据库服务器的访问,可以使其性能得到优化。

  1.4 优化屏幕速度

  优化屏幕的速度,就是优化其显示和切换的速度,主要要注意以下几点:(1)减少屏幕窗口的使用功能,如果一个屏幕上有过多功能,则会导致其运行速度减慢;(2)在需要检索较大数量的数据时,利用数据窗口注意要有所限制,限制记录从数据库返回缓冲区的个数,应该在数据窗口即将填满数据的时候让用户看到屏幕并得到其控制权,而不是要等到数据全部都检索出来,之后再进行数据窗口的填充;(3)避免让用户等待空屏,要在显示数据窗口之后再通过服务器检索数据。

  1.5 优化数据链接库

  ADO 有着便于使用和远程数据访问的特点,其速度较快,占用的内存少,对磁盘造成的遗留痕迹小,而且其关键功能是支持服务器和客户端的建立以及基于Web 的应用程序,通过远程数据的访问,可以将服务器的数据通过来回传输移动到Web 网页或者  客户端的应用程序中,用户再通过客户端来操作或者更新数据,再把数据传输回服务器。

  1.6 优化网络负载

  网络是服务器和客户端的工作基础,而由于网络的宽带存在限制,往往也会影响到SQL Server 数据库系统性能的优化。通过利用存储过程来减少对SQL Server 数据库的大量查询,可以避免网络流量过大而造成的网络拥堵和堵塞,从而可以提高SQLServer 数据库系统的吞吐量,加快其响应时间。一方面,客户只需传递一些参数来调用存储过程,而不用向SQL Server 数据库服务器发送大量语句。而另一方面,通过利用服务器的处理优势来处理数据,改善了原始数据再进行处理的繁琐情况,通过减小结果的集合而实现了网络负载的优化。

  1.7 善用临时列表

  在进行大量数据的统计处理时,客户机的运行速度会随着数据库数量的增加而减慢,当处理表的记录多达上几十万甚至几百万条的时候,运行速度减慢的效果会更加明显。而如果在编制程序时,善于利用临时列表的话,就可以大大的提高系统的运行速度和处理时间,从而减少甚至忽略因处理表记录过多对系统运行处理性能的影响。所谓的临时列表,是系统在运行时存放在临时数据库的文件,这些文件会在系统完成数据处理之后被自动删除。

  2 优化SQL 的语句

  2.1 充分利用索引,减少全表扫描

  优化SQL 语句,实质上就是保证正确结果的前提下,通过对索引的充分利用,采用服务器可以识别的语句来进行索引,以减少对服务器的全表扫描并避免返回没有限定条件的信息。

  例如下面的两条SQL 语句:

  语句一:select 班级,姓名from T1 where 姓名not in(select 姓名fromT2);

  语句二:select 班级,姓名from T1 where not exists(select 班级FROM T2 where T2 . 姓名=T1 姓名);

  在上述的语句一和语句二中,两者的的结果是一样的,但是由于语句一没有使用在T2 表上建立的姓名索引,因此SQLServe 在执行的时候就会扫描整个T2 表。而语句二中的子查询因为使用了联合查询,所以SQL Serve 在执行的时候就只是扫描T2 表的部分数据。通过利用姓名索引,使语句二比语句一的检索效率要高许多,通过语句的优化,也使SQL Serve 数据库的系统性能得到了优化。同时,还要避免在表达式中使用条件列。例如“where 成绩='90‘”以及“where 成绩/100 > 0.8”这两个条件列。在这里,SQL 的条件语句都有着恰当的索引,但是执行语句的速度却非常的慢,这是因为条件列中“where”字句对列的所有操作结果,都是SQL Serve 在执行语句时通过对每列的计算的来的,所以SQL 要对全表进行扫描。而将上面两个条件列语句改成“where 成绩like'90’”和“where 成绩> 80”,则SQL Serve 执行语句的速度则会明显快很多。

  再者,在SQL 语句中,还要避免使用不相等或者NULL 条件列,例如“where 成绩is null”和“where 成绩≠ 80”,因为这样的话虽然在查询列例有索引,但这个索引却无法被使用。

  还有的话,在使用like 条件列时,要尽量避免赋值变量或者是以“%”作为开始,因为这种情况下索引也无法被使用,如“where姓名like'%Jam' ”和“where 班级like var_ 班级”.

  2.2 避免使用in、not in 语句

  在SQL 语句中,要避免用到in、not in 的语句,而采用exists、not exists 语句的效果要比使用in、not in 语句的效果好得多。

  2.3 慎用联合查询以及查询次序

  对于视图的查询,是可以将其分解,变成对数据表的直接数据查询。而在进行数据查询时,程序员首先要查询的往往是主表,而由于主表需要扫描整个表数据,因此应该将主表的数据量控制为的,主表的查询列范围也要比从表的查询列范围小。主表和从表之间的联合要结合数据量的大小以及索引条件来考虑。

  3 结语

  SQL Server 数据库系统系能的优化是一个复杂的系统工程,其贯穿了数据库系统的整个生命周期,从系统的开发、到系统的设计、到系统的维护,每个环节和每个步骤都要注意,一点小小的失误都会影响SQL Server 数据库系统的终性能。因此要重视对SQL Server 数据库系统的优化意识,要根据用户软件和硬件的实际配置、对于系统的性能和作用的要求、以及应用程序的设计等情况来采取合适的优化策略。而对于系统的网络瓶颈、性能要求以及事务特点和储存结构等都要有深刻的认识和理解,并以其作为系统性能优化的基础。在进行系统开发的时候,还要结合实际情况对系统进行性能权衡优化,以提高系统的整体性能。

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!