SQL Server 與 .NET 同屬微軟生態,效能息息相關。優化資料庫效能不僅著眼於 T-SQL,更需從 .NET 應用程式層面著手。本文詳細解析關鍵效能指標、SQL 撰寫原則,並深入探討 .NET 端的連線池、批次處理、資料存取元件選擇等實戰技巧。
連線池緩存實體連線,避免重複建立昂貴的實體連線。
Pooling=false 可關閉。盡早關閉連線,避免等待 GC 回收造成記憶體壓力。使用 using 區塊確保釋放。
using (var tran = conn.BeginTransaction())
{
// 多筆作業
tran.Commit(); // 單次提交,減少磁碟 I/O 與網路往返
}
cmd.Prepare() 預編譯,省去重複解析優化。參數陣列:設定 cmd.ArrayBindCount,一次往返執行多筆參數化命令。
cmd.CommandText = "INSERT INTO employees VALUES (?, ?)";
cmd.ArrayBindCount = 100;
cmd.Parameters[0].Value = idArray;
cmd.Parameters[1].Value = nameArray;
cmd.ExecuteNonQuery(); // 僅 2 次網路往返
批次處理:將多條 SQL 合併為一個命令字串。
cmd.CommandText = "INSERT ...; INSERT ...; ..."; // 100 條
cmd.ExecuteNonQuery(); // 2 次網路往返
DataAdapter 批次更新:設定 UpdateBatchSize 打包命令。
sda.UpdateBatchSize = 5; // 每 5 條打包一次
CommandBuilder 執行時產生 SQL、分析結果集,效能低且並發受限。明確指定 Insert/Update/Delete 命令更佳。
避免 GetValue() 裝箱拆箱,直接呼叫 GetInt32()、GetString() 等。
DataTable.Rows.Find()(利用主鍵索引)。DataView 並設定 Sort,使用 Find/FindRows。Select,建索引成本可能大於收益。SQL Server 與 .NET 效能優化是系統工程,兩端皆需精進。從連線池管理、批次處理、資料存取元件選型到索引設計,環環相扣,方能構建高效能、可擴展的資料驅動應用。