### 避免 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.Execute(strSQL)
Response.write oRs("Title")&">>"&oRs2("Name")&"<br>&q uot;
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>&qu ot;
oRs.MoveNext()
wend
方法二、尽量避免使用可更新 Recordset
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
方法三、更新数据库时，尽量采用批处 理更新
将所有的 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，如果下面的事务处理过程中，如果遇到错误，就取消已经完成的事务。
方法四、数据库索引
那些将在 Where 子句中出现的字段，你应该首先考虑建立索引；那些需要排序的字段，也应该在考虑之列 。
在 MS Access 中建立索引的方法：在 Access 里面选择需要索引的表，点击“设计”，然后设置相应字段的索引.
在 MS SQL Server 中建立索引的方法：在 SQL Server 管理器中，选择相应的表，然后“设计表”，点击右键，选择“Properties”，选择“indexes/keys”
方法五、避免使 Text 字段太大
当字符串的值大小不固定时，用 varchar 比用 char 的效果要好 些。我曾经看到一个例子程序，字段被定义为 TEXT(255)，但是他的取值经常只有 20 个字符。这个数据表有 50k 个记录，从而使这个数据库很大，大的数据库必然较慢。