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

高效能批量 INSERT 與 DELETE 的 SQL 寫法實戰

     編輯:關於SqlServer

批量刪除:IN 子句最簡高效

DELETE FROM TestTable WHERE ID IN (1, 3, 54, 68)

優於:迴圈多次 DELETE、多條 DELETE 用分號合併。適用於前端勾選不連續 ID 批量刪除。

批量新增:UNION ALL 大法

SQL Server

INSERT INTO TestTable 
SELECT 1, 'abc' UNION ALL 
SELECT 2, 'bcd' UNION ALL 
SELECT 3, 'cde'

Oracle

INSERT INTO TestTable 
SELECT 1, 'abc' FROM dual UNION ALL 
SELECT 2, 'bcd' FROM dual UNION ALL 
SELECT 3, 'cde' FROM dual

實測:1000 筆資料比迴圈 INSERT 快 20 倍以上(除錯模式下)。

兩大前提條件(缺一不可)

  1. 表無主鍵,或主鍵為自動遞增/序列:手動指定 PK 會導致衝突或計畫變差
  2. SQL 字串直接拼接,不可參數化:參數化會產生多個執行計畫,失去批次優勢

⚠️ 安全警示:僅適用於可信資料來源(內部工具、可靠檔案、專用終端),嚴防 SQL 注入。

大數據量分批策略

SQL 陳述式長度有上限(SQL Server 65536 * 網路封包大小)。建議:

  • 5000 筆 → 分 5 批,每批 1000 筆
  • 批次大小可微調(500~2000)以找最佳平衡點

適用場景總結

場景是否適用備註
內部 WinForm 匯入 Excel 手機號碼✅ 完美資料可信、量大但不巨大
GPRS 專用終端上傳資料✅ 適用來源可靠、批次處理
公開網頁表單提交❌ 禁用必須參數化防注入
主鍵為業務自然鍵❌ 不適用需改用 MERGE 或分批 INSERT

開發習慣建議

將常用高效模式收錄進專案開發規範;零碎技巧至少記錄在筆記本,避免「下次再遇到才想起」。

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