从客户端提升SQL Server数据库性能
作者:彭芬 来源:IT专家网 发布时间:2009-03-06 14:27:00
第一:编写限制搜索范围的查询语句。
众所周知,在数据库查询的时候返回记录的多少直接关系到查询的效率。所以,在客户端通过一定的条件语句,限制搜索的范围,往往可以大幅度的提高查询的效率。
如用户在客户端查询数据库的时候,在查询语句中,加入TOP语句,让其显示前面的50条或者100条记录。因为根据经验,用户在查询数据的时候,60%左右要查看的都是靠前面的记录。特别是在一些历史交易信息表中,如在ERP系统的库存交易表中,就可以只显示前面几百条的记录,而不需要显示所有的记录。当用户觉得记录不够时,可以按“全部”,然后客户端再去服务器查询所有的结果。这种设计的话,就可以非常有效的提高数据库的查询性能。
如可以在在客户端设置默认的条件语句。如在ERP系统中,有个采购定单的表单;在后台数据库中,就对应着采购定单这么一张表。默认在查询采购定单的时候,查询到的是未结帐的采购定单。如此的话,即使用户在查询采购单时,没有输入采购定单号或者定单日期等限制条件,客户端在向服务器递交查询语句的时候,会默认把限制条件语句加入进去。如此,对于提高数据库首次查询的效率是非常有帮助的。
当然,无论是利用TOP语句,还是利用Where语句设置默认的限制条件,都不是随便设置的。这往往需要根据客户的使用习惯与表单的性质,来进行确定。如对于客户信息表,其客户本来数量也不多,所以,就没有必要设置限制搜索范围的查询语句。但是对于库存交易明细表,一个月下来,就有可能有成千上完条记录。如此海量的数据,若不设置限制条件的话,则查询起来,用户等待的时间会比较长。所以,针对这种情况,我们默认可以其只显示前面500条记录或者只显示最近30天之内的交易信息。
总之,在客户端适当的加入限制搜索范围的查询语句,是在客户端提高数据库服务器性能的一个首选的方法。
第二:尽量不要采用复杂的存储过程。
SQL Server数据库虽然提供了很强的存储过程功能,但是,在前台应用程序设计的时候,最好不要频繁的去调用数据库的存储过程。这主要是因为存储过程虽然方便,但是其执行速度没有普通的应用程序,如C语言那么快。
而从功能上看,很多存储过程可以完成的功能,前台应用程序完全可以实现。如在一些进销存管理系统中,往往需要把小写金额转换成大写金额,在采购定单上打印出来。这个功能即可以通过数据库的存储过程实现,也可以通过前台的应用程序实现。但是,根据笔者的观察,发现数据库的存储功能的性能不是很理想。若存储过程稍微比较复杂的话,如参数比较多时,客户端的响应时间就会比较慢。相反,如果不是在数据库后台实现这个功能,而是直接在前台利用应用程序实现的话,则其速度就会快许多。
另外,若在后台数据库中建立存储过程的话,会增加服务器的工作量。设想一下,现在采购部门有十个员工,若在一个时段内,都在维护采购定单的话,则就要同时调用这个存储过程,那么对于服务器的资源就会“争用”。相反,若在客户端实现这个功能的话,因为其都是在客户端上执行,所以服务器资源大家就不用你争我夺了。
所以,笔者在数据库设计的时候,很少采用存储过程。能够利用客户端应用程序实现的,就采用前台应用程序实现。真的要采用存储过程的话,也要采用那些减少争用和增加并发性的存储过程。


猜你喜欢
- 带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个
- 本文实例讲述了Python实现新浪博客备份的方法。分享给大家供大家参考,具体如下:Python2.7.2版本实现,推荐在IDE中运行。# -
- 在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始增加:在插入时使用np.insert(),在末尾添加时
- 第一招、mysql服务的启动和停止net stop mysqlnet start mysql第二招、登陆mysql语法如下: mysql -
- 配置 thriftpython使用的包 thrift个人使用的python 编译器是pycharm community edition. 在
- 虽然小型web应用程序用单个脚本可以很方便,但这种方法却不能很好地扩展。随着应用变得复杂,在单个大的源文件中处理会变得问题重重。与大多数其他
- 同级目录(兄弟目录)调用看书看得好好的,一写代码就出错!!!这个问题是大家初学Python的时候会遇到的一个很常见的问题,然后我们去搜网上的
- 写爬虫是一个发送请求,提取数据,清洗数据,存储数据的过程。在这个过程中,不同的数据源返回的数据格式各不相同,有 JSON 格式,有 XML
- 介绍据官方所述,mango Cache是对Guava Cache基于go的部分实现,同时mangoCache参考了Caffeine以及go-
- 一、预备知识1.1、JS数据类型基本数据类型:Boolean、String、Number、null、undefined引用数据类型:Obje
- 💃今天看案例的时候看见了一个关于pandas数据的内存压缩功能,特地来记录一下。🎒先说明一下情况,pandas处理几百兆的dataframe
- 本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能。分享给大家供大家参考,具体如下:# encoding=utf-8_
- 本文研究的主要是Python处理文本换行符的相关内容,具体如下。源文件每行后面都有回车,所以用下面输出时,中间会多了一行try:  
- 什么多态:同一事物有多种形态为何要有多态=》多态会带来什么样的特性,多态性多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象多态指的
- 前言最近整理图片发现,好多图片都非常相似,于是写如下代码去删除,有两种方法:注:第一种方法只对于连续图片(例一个视频里截下的图片)准确率也较
- 热力图热力图(Heat Map)是指用 X 轴 和 Y 轴 表示的两个分类字段确定数值点的位置,通过相应位置的矩形颜色去表现数值的大小,颜色
- 情况一本地导出,远程导入(windows导到linux)本机(物理机)数据库全部导出(左下角打开dos窗口)1.启动mysqlnet sta
- 上次 li 把 dl 模拟了~dl不知道要干什么了:green:~找了ol一起来做复合列表~:这个练习除了css外~外加用了点JS :shi
- 本文实例讲述了Python生成8位随机字符串的方法。分享给大家供大家参考,具体如下:#!/usr/bin/env python# -*- c
- 前言在后端开发过程中与数据库打交道乃是家常便饭,有时候会遇到只要数据库中的某条数据的一部分,这个时候有两种方式:(1)把其读取出来后再进行相