CREATE DATABASE QueryStoreDemo;
ALTER DATABASE QueryStoreDemo SET QUERY_STORE = ON;
ALTER DATABASE QueryStoreDemo SET QUERY_STORE (
OPERATION_MODE = READ_WRITE,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367),
DATA_FLUSH_INTERVAL_SECONDS = 900,
INTERVAL_LENGTH_MINUTES = 1,
MAX_STORAGE_SIZE_MB = 100,
QUERY_CAPTURE_MODE = ALL,
SIZE_BASED_CLEANUP_MODE = OFF
);
Customers、非叢集索引 idx_Test(Value)、灌入 8 萬筆。RetrieveCustomers @Value INT:SELECT * FROM Customers WHERE Value < @Value。EXEC RetrieveCustomers 80000 → 優化器選擇 叢集索引掃描(419 邏輯讀)。DBCC FREEPROCCACHE 模擬重啟/計畫驅逐。EXEC RetrieveCustomers 1 → 產生 Key Lookup 計畫並快取。EXEC RetrieveCustomers 80000 → 復用 Key Lookup 計畫 → 16 萬邏輯讀,效能崩潰。


EXEC RetrieveCustomers 80000; -- 回歸叢集掃描,419 邏輯讀
強制計畫只是止血,非根治!
根因:參數嗅探導致計畫不穩定。長期解決:
OPTION (RECOMPILE)、OPTIMIZE FOR、OPTIMIZE FOR UNKNOWN 控制編譯行為。