您好,並感謝提前看看這個。SQL Server - 在兩個日期之間搜索的最佳方法
我發現了45個存儲過程中的一個問題,其他人寫道,她評論說,性能大幅下滑。我在5分鐘內看了一眼,發現了問題,進行了一次測試,並從60秒下降到了4秒,其中有一次沒有使用索引,並且桌面掃描發生在1000萬個+記錄。這是使用SQL Server 2005.
該表是一個審計日誌,並由存儲過程查詢以在記錄具有特定值時提取updt_tmstmp。我將下面的代碼塊更改爲使用「NOT IN」與8「product_code <>'XX'」語句,將第一個datediff更改爲使用索引列updt_tmstmp,並且還添加了AUDIT_LOG.updt_tmstmp> @dtStartDate實現的檢查性能提高。我只是覺得這可以以不同的方式實現(更優雅)。我希望對改進有任何想法或想法。
WHERE
PRODUCT.product_code NOT IN ('D01', 'D02', 'D03', 'D04', 'D05', 'D06', 'D07', 'D99') AND
AUDIT_LOG.updt_tmstmp >= @dtStartDate AND
--Compares that the date entered is between the two date parameters
(DATEDIFF(dd,GETDATE(),AUDIT_LOG.updt_tmstmp)
BETWEEN DATEDIFF(dd,GETDATE(),@dtStartDate)
AND DATEDIFF(dd,GETDATE(),@dtEndDate))
AND AUDIT_LOG.event_id = (SELECT MIN(AUDIT_LOG.event_id)
FROM L_EVENT_LOG
WHERE AUDIT_LOG.transaction_id = PRODUCT.transaction_id AND AUDIT_LOG.queue = 'AP')
是的,audit_log.updt_tmstmp看起來很奇怪,我同意。相關的子查詢有一個新的編輯完成,我在我們的開發環境中使用索引,並沒有改變表名。 –