首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

提升 ASP 中 SQL 執行效率的五大實務做法

     編輯:關於SqlServer

做法一:以複雜單一 SQL 取代迴圈多重查詢 (善用 JOIN)

反模式:外層查詢 Books,迴圈內對每筆再查 Authors (N+1 問題)。

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

優化:單一 JOIN 完成。

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

做法二:避免使用可更新 Recordset (伺服端游標)

較慢:開啟可更新 Recordset 再 Update。

oRs = oConn.Execute("SELECT * FROM Authors WHERE AuthorID=17", 3, 3) ' adOpenStatic, adLockOptimistic
oRs("Name") = "DarkMan"
oRs.Update

較快:直接執行 UPDATE 陳述式。

strSQL = "UPDATE Authors SET Name='DarkMan' WHERE AuthorID=17"
oConn.Execute strSQL

做法三:批次更新 (交易控制)

將多條 SQL 組成單一批次送往伺服器,減少網路往返,並滿足 ACID 需求。

strSQL = ""
strSQL = strSQL & "SET XACT_ABORT ON" & vbCrLf
strSQL = strSQL & "BEGIN TRANSACTION" & vbCrLf
strSQL = strSQL & "INSERT INTO orders(OrdID,CustID,OrdDat) VALUES('9999','1234',GETDATE())" & vbCrLf
strSQL = strSQL & "INSERT INTO orderRows(OrdID,OrdRow,Item,Qty) VALUES('9999','01','G4385',5)" & vbCrLf
strSQL = strSQL & "INSERT INTO orderRows(OrdID,OrdRow,Item,Qty) VALUES('9999','02','G4726',1)" & vbCrLf
strSQL = strSQL & "COMMIT TRANSACTION" & vbCrLf
strSQL = strSQL & "SET XACT_ABORT OFF" & vbCrLf
oConn.Execute(strSQL)

SET XACT_ABORT ON 確保遇錯自動回滾。

做法四:建立適當索引

  • WHERE 子句常用欄位 → 優先建索引。
  • ORDER BY、GROUP BY、JOIN ON 欄位 → 納入考量。
  • Access:設計檢視 → 設定欄位 索引 屬性。
  • SQL Server:企業管理器 → 設計資料表 → 右鍵 屬性/索引鍵。

做法五:避免過大的 TEXT 欄位

  • 可變長度字串用 VARCHAR 而非 CHAR。
  • 實例:欄位定義 TEXT(255) 但實際常只存 20 字元,5 萬筆資料導致資料庫膨脹、I/O 變慢。改為 VARCHAR(255) 或適當長度。

總結

效能優化無銀彈:減少往返 (JOIN/批次)、避免伺服端游標、精準索引、精簡資料型別,配合執行計畫分析持續調校。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved