ASP中优化SQL语句更有效率的几个方法总结

时间:2021-04-16

  现在ASP和SQL数据库联系紧密,包括Access数据库,数据库的执行效率直接关系着你系统的运行质量,因此优化好你的数据库,是很有必要的,下面介绍几种SQLSERVER/ACCESS优化方法,对使用ASP的朋友,或许会有不小帮助。

  方法一:要使用复合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")&"
&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")&"
&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,如果事务处理过程中遇到错误,就取消已经完成的事务。

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

  方法五:数据库索引。需要在Where子句出现的字段,最好建立索引;需要排序的字段,也应该这样做。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章