10点优化sql数据库技巧
来源:asp之家 发布时间:2008-06-09 15:00:00
与没有数据库的网站相比,数据库的存取会降低你的系统性能。但是大多数情况下,网站和数据库有密不可分的关系,正是数据库给站点提供了大容量、多样性、个性化等特色,并实现了很多特殊的功能。
1不要忘记给数据库做索引。
合理的索引能立即显著地提高数据库整个系统的性能。可以参考有关SQL性能调试书籍,学会根据所需查询方式合理制作索引和根据索引方式改进查询语句。
2在适当的情况下,尽可能的用存储过程而不是SQL查询。
因为前者已经过了预编译,运行速度更快。同时让数据库仅仅返回你所需要的那些数据,而不是返回大量数据再让ASP程序过滤。总之要充分和有效地发挥数据库的强大功能,让它按照我们的要求反馈给我们最合适和最精练的信息。
3在可能情况下我们应该使用SQL Server而不是Access。因为Access仅仅是基于文件的数据库,多用户性能很差。数据库连接尽量使用OLEDB和非DSN方式,因为这种连接方式有更好的并发性能。
4避免使用DAO(Data Access Objects)和RDO(Remote Data Objects)数据源。因为他们主要应用在单用户的处理系统里,ADO(ActiveX Data Objects)才是为Web应用设计的。
5建立记录集Rescordset的时候要清晰合理地设置数据游标(cursort)和锁定方式(locktype)。
因为在不同的方式下ASP会以不同的方式操纵数据库,其执行速度也有很大区别,尤其在大数据量的时候。如果你只想遍历数据,那么默认游标(前进、只读)会带来最好的性能。
6当你引用ADO变量的时候,会消耗较多的CPU周期。因此,如果在一个ASP页面中多次引用数据库的字段变量,一个较好的方式是将字段值先放入本地变量,然后可以直接调用本地变量来计算和显示数据。
7缓存ADO Connection对象也许不是一个好主意。
如果一个连接(Connection)对象被存储在Application对象中而被所有ASP页面使用,那么所有页面就会争着使用这个连接。但是如果连接对象被存储在Session对象中,就要为每个用户创建一个数据库连接,这就减小了连接池的作用,并且增大了Web服务器和数据库服务器的压力。可以用在每个使用ADO的ASP页创建和释放ADO对象来替代缓存数据库连接。因为IIS内建了数据库连接池,所以这种方法非常有效,缺点是每个ASP页面都需要进行一些创建和释放操作。
8ASP最强大和主要的用途之一就是对数据库进行操作,在数据库操作中我们要注意:不要任意使用“SELECT * ......” 形式的SQL查询语句。应该尽量检索你所需要的那些字段。比如一个表中有10个字段,但是你只会用到其中的一个字段(name),就该使用“select name from mytable”,而不是用“select * from mytable”。在字段数比较少的时候,两者的区别可能并不明显,但是当一个表中拥有几十个字段的时候,数据库会多检索很多你并不需要的数据。在这种情况下你最好不要为了节省打字时间或者害怕查找对应字段名称的麻烦,而要老老实实地使用
“select id,name,age... from mytable”。
9及时关闭打开的记录集对象以及连接(Connection)对象。
记录集对象和连接对象耗费系统资源相当大,因此它们的可用数量是有限的。如果你打开了太多的记录集对象以及连接对象而最后却没有关闭它们,可能会出现ASP程序刚开始的时候运行速度很快,而多运行几遍就越来越慢的现象,甚至导致服务器死机。请使用如下方法进行关闭:
MyRecordSet.closeSet MyRecordSet=Nothing
Set MyConnection=Nothing
10 连接数据库
仍然使用ODBC系统或者文件DSN来连接数据库,或者使用很快的OLEDB技术来连接。使用后者,当移动Web文件时,不再需要修改配置。
OLEDB位于应用程序与ODBC层之间。在ASP页面中,ADO就是位于OLEDB之上的程序。调用ADO时,首先发送给OLEDB,然后再发送给ODBC层。可以直接连接到OLEDB层,这么做后,将提高服务器端的性能。怎么直接连接到OLEDB呢?
如果使用SQLServer 7,使用下面的代码做为连接字符串:
strConnString = "DSN='';DRIVER={SQL SERVER};" & _
"UID=myuid;PWD=mypwd;" & _
"DATABASE=MyDb;SERVER=MyServer;"
最重要的参数就是“DRIVER=”部分。如果你想绕过ODBC而使用OLEDB来访问SQL Server,使用下面的语法:
strConnString ="Provider=SQLOLEDB.1;Password=mypassword;" & _
"Persist Security Info=True;User ID=myuid;" & _
"Initial Catalog=mydbname;" & _
"Data Source=myserver;Connect Timeout=15"
为什么这很重要
现在你可能奇怪为什么学习这种新的连接方法很关键?为什么不使用标准的DSN或者系统DSN方法?好,根据Wrox在他们的ADO 2.0程序员参考书籍中所做的测试,如果使用OLEDB连接,要比使用DSN或者DSN-less连接,有以下的性能提高表现:
性能比较:
----------------------------------------------------------------------
SQL Access
连接时间: 18 82
重复1,000个记录的时间:2900 5400
OLEDB DSN OLEDB DSN
连接时间:62 99
重复1,000个记录的时间:100 950
----------------------------------------------------------------------
这个结论在Wrox的ADO 2.0程序员参考发表。时间是以毫秒为单位,重复1,000个记录的时间是以服务器油标的方式计算的。
猜你喜欢
- 腾讯“月捐计划”倡导爱心人士,通过每月小额捐款的形式,长期关注和支持公益项目。并和亿万爱心网友一起,每人每月1份爱,点滴付出,汇成爱海,形成
- 在SQL Server数据库中,有min server memory与max server memory两个内存选项。数据库管理员合理设置这
- 错误类型: Microsoft JET Database Engine (0x80040E10) 至少一个参数没有被指定值。 原因:在写SQ
- CSS制作滑动折叠的文字效果,可以用于二级导航菜单的制作,不错的下拉菜单。<!DOCTYPE html PUBLIC "-/
- 在这篇asp之数学函数里,我们将会以表格的形式,让大家了解到关于ASP中能用到的数学函数,里面包括一个数的绝对值、一个数的平方根
- 可用下列函数来产生你需要的东西,将它们发送给用户就可以啦:<%response.write makePassword(16)
- 在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗的解决方法分享。<div id='tes
- MySQL是关系型数据库中的明星,MongoDB是文档型数据库中的翘楚。下面通过一个设计实例对比一下二者:假设我们正在维护一个手机产品库,里
- 在网上查找大量资料,经过自己的不懈努力,终于测试成功了。原来要在服务器上安装mysql odbc 3.51 ,还有数据库用户名及密码,用下面
- 网上考试设计思路是怎样的?为了运行这个应用程序,我们需要在global.asa文件里进行设置数据库的连接。global.asa <&n
- Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 重作日
- Dreamweaver MX 2004新增加了表格宽度辅助线功能,让我们在编辑网页表格的时候能清楚地看到表格中各单元的宽度以及变化,很直观。
- '====================================='功能:根据ip地址输出地区'参数:ip
- 引子:今天在蓝点看了Yang的博客《CSS样式表中继承关系的空格与不空格》,思考了一下,本来想写《CSS样式的复合定义与复合调用及简单的模块
- 现像如下:站点无法打开,或者打开很慢.HTML可以打开.重新启动或者回收应用程序池可恢复.但过一段时间又会出现日志里会有:ISAPI
- 常规循环引用内存泄漏和Closure内存泄漏 要了解javascript的内存泄漏问题,首先要了解的就是javascript的GC原理。我记
- 首先你要明白24bit的bmp图片的基本信息:1像素占3个字节,头部占54个字节。好了,现在开始做验证码了,这里以4位验证码(大小为20(高
- 本文帮你六步改善SQL Server安全规划全攻略。一、什么是SQL注入式攻击所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的
- 分区视图联接来自一组成员的水平分区数据,使数据看起来象来自同一张表。SQL Server 2000 区分本地分区视图和分布式分区视图。在本地
- 在进行Web的交互设计中,颜色信息的传达也是不可或缺的一部分。我们常会发现许多“灰色”的应用,他们的出现总是不动声色而又恰如其分,维持了整个