提高SQL的执行效率的ASP的五种做法

[b]方法一、尽量使用复杂的SQL来代替简单的一堆SQL[/b]

同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率,有多个查询时,要善于使用JOIN。

oRs=oConn.Execute("Select * FROM Books") 

while not ors.Eof 

    strSQL = "Select * FROM Authors Where AuthorID="&oRs("AuthorID") ors2=oConn.Execute(strSQL) 

    Response.write ors("Title")&">>"&oRs2("Name")&"<br>"

    ors.MoveNext() 

wend

要比下面的代码慢:

strSQL="Select Books.Title,Authors.Name FROM Books JOIN Authors ON Authors.AuthorID=Books.AuthorID" 

ors=oConn.Execute(strSQL) 

while not ors.Eof 

    Response.write ors("Title")&">>"&oRs("Name")&"<br>"

    ors.MoveNext() 

wend

[b]方法二、尽量避免使用可更新Recordset[/b]

oRs=oConn.Execute("Select * FROM Authors Where AuthorID=17",3,3)

ors("Name")="DarkMan"

ors.Update()

要比下面的代码慢:

strSQL = "Update Authors SET Name='DarkMan' Where AuthorID=17"

oConn.Execute strSQL

[b]方法三、更新数据库时,尽量采用批处 理更新[/b]

将所有的SQL组成一个大的批处理SQL,并一次运行;这比一个一个地更新数据要有效率得多。这样也更加满足你进行事务处理的需要:

strSQL=""

strSQL=strSQL&"SET XACT_ABORT ON\n";

strSQL=strSQL&"BEGIN TRANSACTION\n";

strSQL=strSQL&"Insert INTO orders(OrdID,CustID,OrdDat) VALUES('9999','1234',GETDATE())\n";

strSQL=strSQL&"Insert INTO orderRows(OrdID,OrdRow,Item,Qty) VALUES('9999','01','G4385',5)\n";

strSQL=strSQL&"Insert INTO orderRows(OrdID,OrdRow,Item,Qty) VALUES('9999','02','G4726',1)\n";

strSQL=strSQL&"COMMIT TRANSACTION\n";

strSQL=strSQL&"SET XACT_ABORT OFF\n";

oConn.Execute(strSQL);

其中,SET XACT_ABORT OFF 语句告诉SQL Server,如果下面的事务处理过程中,如果遇到错误,就取消已经完成的事务。

[b]方法四、数据库索引[/b]

那些将在Where子句中出现的字段,你应该首先考虑建立索引;那些需要排序的字段,也应该在考虑之列 。

在MS Access中建立索引的方法:在Access里面选择需要索引的表,点击“设计”,然后设置相应字段的索引.

在MS SQL Server中建立索引的方法:在SQL Server管理器中,选择相应的表,然后“设计表”,点击右键,选择“Properties”,选择“indexes/keys”

[b]方法五、避免使Text字段太大[/b]

当字符串的值大小不固定时,用varchar比用char的效果要好些。我曾经看到一个例子程序,字段被定义为TEXT(255),但是他的取值经常只有20个字符。这个数据表有50k个记录,从而使这个数据库很大,大的数据库必然较慢。

时间: 2024-10-27 17:08:58

提高SQL的执行效率的ASP的五种做法的相关文章

提高SQL的执行效率的ASP的五种做法_应用技巧

[b]方法一.尽量使用复杂的SQL来代替简单的一堆SQL[/b] 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率,有多个查询时,要善于使用JOIN. oRs=oConn.Execute("Select * FROM Books")  while not ors.Eof      strSQL = "Select * FROM Authors Where AuthorID="&oRs("AuthorID") ors2=o

SQL Server并行操作优化避免并行操作被抑制而影响SQL的执行效率_MsSql

为什么我也要说SQL Server的并行: 这几天园子里写关于SQL Server并行的文章很多,不管怎么样,都让人对并行操作有了更深刻的认识. 我想说的是:尽管并行操作可能(并不是一定)存在这样或者那样的问题,但是我们不能否认并行,仍然要利用好并行. 但是,实际开发中,某些SQL语句的写法会导致用不到并行,从而影响到SQL的执行效率 所以,本文要表达的是:我们要利用好并行,不要让一些SQL的写法问题"抑制"了并行,让我们享受不了并行带来的快感 关于SQL Server的并行: 所谓的

根据mysql慢日志监控SQL语句执行效率_Mysql

根据mysql慢日志监控SQL语句执行效率 启用MySQL的log-slow-queries(慢查询记录). 在Linux环境下先要找到my.cnf文件(一般在/etc/mysql/),然后可能会发现该文件修改后无法保存,原因是你没有相应的权限,可以从属性中看到该文件的所有者是root,这时要先以root的身份打开它: sudo nautilus /etc/mysql 接着再打开my.cnf文件然后找到[mysqld]标签在下面加上: log-slow-queries=/path/slow.lo

对《30个提高Web程序执行效率的好经验》的理解

阅读了博客园发布的IT文章<30个提高Web程序执行效率的好经验>,这30条准则对我们web开发是非常有用的,不过大家可能对其中的一些准则是知其然而不知其所以然. 下面是我对这些准则的理解和分析,有些有关JS性能的准则,我也测试了它们的差异,大家可以下载DEMO页面,如有理解不正确的地方,请大家指正.也非常欢迎大家补充. 测试环境: OS:Vista; Processor:3.40GHz; Memory: 2.00GB; System type: 32-bit Operating System

ASP中五种连接数据库的方法

连接数据库 ASP中五种连接数据库的方法 简介 介绍ASP连接sql,连接access,等数据库的方法! 正文 ASP中五种连接数据库的方法 第一种 - 这种方法用在ACCESS中最多 strconn = "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("aspfree.mdb") set conn = server.createobject("adodb.connect

如何避免asp的SQL的执行效率低 (转载)

执行 方法一.尽量使用复杂的SQL来代替简单的一堆 SQL. 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率.有多个查询时,要善于使用JOIN. oRs=oConn.Execute("SELECT * FROM Books") while not oRs.Eof strSQL = "SELECT * FROM Authors WHERE AuthorID="&oRs("AuthorID") oRs2=oConn.Exe

避免asp的SQL的执行效率低

执行 方法一.尽量使用复杂的SQL来代替简单的一堆 SQL. 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率.有多个查询时,要善于使用JOIN.[code]oRs=oConn.Execute("SELECT * FROM Books") while not oRs.Eof strSQL = "SELECT * FROM Authors WHERE AuthorID="&oRs("AuthorID") oRs2=oCon

如何避免asp的SQL的执行效率低

方法一.尽量使用复杂的SQL来代替简单的一堆 SQL. 同样的事务,一个复杂的SQL完成的效率高于一堆简单SQL完成的效率.有多个查询时,要善于使用JOIN. oRs=oConn.Execute("SELECT * FROM Books") while not oRs.Eof strSQL = "SELECT * FROM Authors WHERE AuthorID="&oRs("AuthorID") oRs2=oConn.Execut

通过查询分析器对比SQL语句执行效率

可以方便地对不同的SQL语句进行效率对比.首先打开查询分析器,将查询菜单中的"显示执行计划"."显示服务器跟踪"."显示客户统计"都选中. 在编辑窗口中输入要进行对比的SQL语句,比如不同方式的查询: SELECT *FROM CRM_FWDWHERE RQ BETWEEN '2006-06-01' AND '2006-06-02'SELECT *FROM CRM_FWDWHERE DATEDIFF(DAY, RQ, '2006-06-01')