从客户端提升SQL Server数据库性能

上一篇 / 下一篇  2012-11-08 09:34:37 / 个人分类:数据库

51Testing软件测试网XKp |5oy8j

  第一:编写限制搜索范围的查询语句。

A2XjB2GP!U0

{'kCYu%t0  众所周知,在数据库查询的时候返回记录的多少直接关系到查询的效率。所以,在客户端通过一定的条件语句,限制搜索的范围,往往可以大幅度的提高查询的效率。51Testing软件测试网&jM YHsT4l o P

@Z^hj%C0   如用户在客户端查询数据库的时候,在查询语句中,加入TOP语句,让其显示前面的50条或者100条记录。因为根据经验,用户在查询数据的时候,60% 左右要查看的都是靠前面的记录。特别是在一些历史交易信息表中,如在ERP系统的库存交易表中,就可以只显示前面几百条的记录,而不需要显示所有的记录。 当用户觉得记录不够时,可以按“全部”,然后客户端再去服务器查询所有的结果。这种设计的话,就可以非常有效的提高数据库的查询性能。

/T6y,u2\*SDF@/B0

dU4t@iyDc*dQ0   如可以在在客户端设置默认的条件语句。如在ERP系统中,有个采购定单的表单;在后台数据库中,就对应着采购定单这么一张表。默认在查询采购定单的时候, 查询到的是未结帐的采购定单。如此的话,即使用户在查询采购单时,没有输入采购定单号或者定单日期等限制条件,客户端在向服务器递交查询语句的时候,会默 认把限制条件语句加入进去。如此,对于提高数据库首次查询的效率是非常有帮助的。

-QH5i1nn9f)zc0

xi*oE D3[!Yr~"C0  当然,无论是利用TOP语句,还是利用Where语句 设置默认的限制条件,都不是随便设置的。这往往需要根据客户的使用习惯与表单的性质,来进行确定。如对于客户信息表,其客户本来数量也不多,所以,就没有 必要设置限制搜索范围的查询语句。但是对于库存交易明细表,一个月下来,就有可能有成千上完条记录。如此海量的数据,若不设置限制条件的话,则查询起来, 用户等待的时间会比较长。所以,针对这种情况,我们默认可以其只显示前面500条记录或者只显示最近30天之内的交易信息。51Testing软件测试网av/~8WC

51Testing软件测试网(cjHQ6`t.D1H#e;]N|

  总之,在客户端适当的加入限制搜索范围的查询语句,是在客户端提高数据库服务器性能的一个首选的方法。51Testing软件测试网:nLad4z7K} G-u

.l-N'a1{5}*|V0  第二:尽量不要采用复杂的存储过程。

W4vfTJ#cSi'Y0

7Qq'p j w q0  SQLServer数据库虽然提供了很强的存储过程功能,但是,在前台应用程序设计的时候,最好不要频繁的去调用数据库的存储过程。这主要是因为存储过程虽然方便,但是其执行速度没有普通的应用程序,如C语言那么快。

STp'`A3o{6V8Uj+M051Testing软件测试网 n g#R0[(i8i|vz6k e @)h

   而从功能上看,很多存储过程可以完成的功能,前台应用程序完全可以实现。如在一些进销存管理系统中,往往需要把小写金额转换成大写金额,在采购定单上打 印出来。这个功能即可以通过数据库的存储过程实现,也可以通过前台的应用程序实现。但是,根据笔者的观察,发现数据库的存储功能的性能不是很理想。若存储 过程稍微比较复杂的话,如参数比较多时,客户端的响应时间就会比较慢。相反,如果不是在数据库后台实现这个功能,而是直接在前台利用应用程序实现的话,则 其速度就会快许多。

f(M&e;q)@:pF6iG{0s051Testing软件测试网@ M)D@h+\8U2uHv

  另外,若在后台数据库中建立存储过程的话,会增加服务器的工作量。设想一下,现在采购部门有十个员工,若在一个时段内,都在维护采购定单的话,则就要同时调用这个存储过程,那么对于服务器的资源就会“争用”。相反,若在客户端实现这个功能的话,因为其都是在客户端上执行,所以服务器资源大家就不用你争我夺了。

Px7rCM;^I0

/T+EpLFr0  所以,笔者在数据库设计的时候,很少采用存储过程。能够利用客户端应用程序实现的,就采用前台应用程序实现。真的要采用存储过程的话,也要采用那些减少争用和增加并发性的存储过程。

6q&JqA7{:ar0

TAG:

 

评分:0

我来说两句

Open Toolbar