首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

參數化查詢與批次 SQL 執行:大幅提升資料庫操作效能

     編輯:關於ASP.NET

核心優化原則

面對大量資料集中處理需求,兩大關鍵:

  1. 參數化:IDbCommand.Prepare() 讓 SQL 只編譯一次,多次執行只換參數。
  2. 批次執行:單次網路往返發送多條 SQL,減少通訊開銷。

不同資料庫的批次語法差異

  • T-SQL (SQL Server):語句間用分號分隔。
    DELETE FROM TableA WHERE id = @id; UPDATE TableB SET Name=@name WHERE id=@id
  • PL/SQL (Oracle):需包裹在 BEGIN ... END; 區塊。
    BEGIN DELETE FROM TableA WHERE id = :id; UPDATE TableB SET Name=:name WHERE id=:id; END;

實戰範例:Oracle 批次刪除流程實例資料

private void DeleteFlowInstanceData(string flowInstanceId)
{
    OracleCommand cmd = this.cmdDeleteFlowInstanceData;
    if (cmd == null)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("BEGIN ");
        sb.Append("DELETE FROM bak_WF_Log_EngineLog WHERE FlowInstanceID = :instanceId; ");
        sb.Append("DELETE FROM bak_WF_Log_ErrLog WHERE FlowInstanceID = :instanceId; ");
        // ... 其他刪除語句
        sb.Append("END;");

        cmd = new OracleCommand(sb.ToString(), this.connEngine);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.Add("instanceId", OracleType.VarChar, 250);
        cmd.Prepare(); // 關鍵:預編譯
        this.cmdDeleteFlowInstanceData = cmd;
    }
    cmd.Parameters["instanceId"].Value = flowInstanceId;
    cmd.Transaction = this.tranEngine;
    cmd.ExecuteNonQuery();
}

效能提升預期

結合參數化與批次,典型場景可獲 數倍至十倍以上 的效能提升。輔以熱點資料快取,可進一步降低資料庫壓力。

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