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

提升 SQL 效能的五大關鍵技巧:從 IDENTITY 擷取談起

     編輯:關於SqlServer

問題情境

應用程式常面臨 SQL 查詢回應緩慢、報表產生等待過久的困擾。根本原因通常在資料庫設計與查詢寫法,而非硬體資源。

技巧一:正確擷取 INSERT 後的 IDENTITY 值

在 SQL Server 中,@@IDENTITY 回傳目前連線上最後一條 INSERT 產生的識別值。但必須在同一連線、緊接著 INSERT 之後立即呼叫,否則可能取到錯誤值。

正確寫法 (單一批次)

INSERT INTO Products (ProductName) VALUES ('Chalk');
SELECT @@IDENTITY;

ADO 應用範例 (VB)

Set oRs = oCn.Execute("SET NOCOUNT ON; INSERT INTO Products (ProductName) VALUES ('Chalk'); SELECT @@IDENTITY")

關鍵點:SET NOCOUNT ON 減少網路往返,整個操作在單一 Execute 呼叫完成,確保連線唯一性。

技巧二:善用索引覆蓋避免書籤查詢

建立包含查詢所需所有欄位的非叢集索引,查詢計畫可直接從索引葉層取得資料,省去查找資料頁的書籤查詢成本。

技巧三:優化 JOIN 順序與條件

  • 確保 JOIN 條件欄位擁有適當索引。
  • 以較小結果集為外部迴圈 (驅動表),減少 I/O。
  • 使用 SET SHOWPLAN_ON 或圖形化執行計畫分析實際連接順序。

技巧四:避免 WHERE 子句對欄位進行運算

錯誤:WHERE SUBSTRING(card_no,1,4)='5378' → 導致掃描全表。
正確:WHERE card_no LIKE '5378%' → 可用索引搜尋。

同理,amount/30 < 1000 改為 amount < 30000;日期轉換改用參數化比對。

技巧五:謹慎使用 IN / OR 條件

IN 或 OR 常導致「OR 策略」:建立暫存工作表、去重複,無法使用索引。若值不重複,拆分為多條查詢再 UNION ALL 或用暫存表/資料表值參數傳入集合,效能大幅提升。

總結

SQL 優化本質:在結果正確前提下,撰寫優化器可識別的語句,充分利用索引,減少掃描與額外 I/O。持續監控、測試、調整,方能達到最佳效能。

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