應用程式常面臨 SQL 查詢回應緩慢、報表產生等待過久的困擾。根本原因通常在資料庫設計與查詢寫法,而非硬體資源。
在 SQL Server 中,@@IDENTITY 回傳目前連線上最後一條 INSERT 產生的識別值。但必須在同一連線、緊接著 INSERT 之後立即呼叫,否則可能取到錯誤值。
INSERT INTO Products (ProductName) VALUES ('Chalk');
SELECT @@IDENTITY;
Set oRs = oCn.Execute("SET NOCOUNT ON; INSERT INTO Products (ProductName) VALUES ('Chalk'); SELECT @@IDENTITY")
關鍵點:SET NOCOUNT ON 減少網路往返,整個操作在單一 Execute 呼叫完成,確保連線唯一性。
建立包含查詢所需所有欄位的非叢集索引,查詢計畫可直接從索引葉層取得資料,省去查找資料頁的書籤查詢成本。
SET SHOWPLAN_ON 或圖形化執行計畫分析實際連接順序。錯誤:WHERE SUBSTRING(card_no,1,4)='5378' → 導致掃描全表。
正確:WHERE card_no LIKE '5378%' → 可用索引搜尋。
同理,amount/30 < 1000 改為 amount < 30000;日期轉換改用參數化比對。
IN 或 OR 常導致「OR 策略」:建立暫存工作表、去重複,無法使用索引。若值不重複,拆分為多條查詢再 UNION ALL 或用暫存表/資料表值參數傳入集合,效能大幅提升。
SQL 優化本質:在結果正確前提下,撰寫優化器可識別的語句,充分利用索引,減少掃描與額外 I/O。持續監控、測試、調整,方能達到最佳效能。