亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OPTION(RECOMPILE)總是更快;為什么?

OPTION(RECOMPILE)總是更快;為什么?

溫溫醬 2020-02-04 16:19:03
我遇到了一種奇怪的情況,將OPTION (RECOMPILE)查詢追加到查詢中會使查詢在半秒內運行,而忽略查詢會使查詢花費超過五分鐘的時間。從Query Analyzer或C#程序通過執行查詢時,就是這種情況SqlCommand.ExecuteReader()。打電話(或不打電話)DBCC FREEPROCCACHE或DBCC dropcleanbuffers沒有區別;查詢結果總是在OPTION (RECOMPILE)不超過五分鐘的情況下即時返回。始終使用相同的參數調用該查詢(為了進行此測試)。我正在使用SQL Server 2008。我對編寫SQL相當滿意,但以前從未OPTION在查詢中使用過命令,并且在掃描此論壇上的帖子之前并不熟悉計劃緩存的整個概念。我從帖子中了解到,這OPTION (RECOMPILE)是一項昂貴的操作。顯然,它為查詢創建了新的查找策略。那么,為什么隨后的省略的查詢OPTION (RECOMPILE)是如此之慢呢?后續查詢是否應該利用上一次包含重新編譯提示的調用所計算的查找策略?是否有一個查詢在每次調用時都需要重新編譯提示是非常不尋常的嗎?對不起入門級的問題,但我實在無法一馬當先。更新:我被要求發布查詢...select acctNo,min(date) earliestDate from(     select acctNo,tradeDate as date     from datafeed_trans     where feedid=@feedID and feedDate=@feedDate     union     select acctNo,feedDate as date     from datafeed_money     where feedid=@feedID and feedDate=@feedDate     union     select acctNo,feedDate as date     from datafeed_jnl     where feedid=@feedID and feedDate=@feedDate )t1 group by t1.acctNoOPTION(RECOMPILE)從查詢分析器運行測試時,我將在以下幾行前添加:declare @feedID intselect @feedID=20declare @feedDate datetimeselect @feedDate='1/2/2009'從我的C#程序調用它時,參數通過SqlCommand.Parameters屬性傳遞。為了便于討論,您可以假設參數永遠不會改變,因此我們可以排除次佳的參數氣味是造成這種情況的原因。
查看完整描述

3 回答

?
慕少森

TA貢獻2019條經驗 獲得超9個贊

有時候使用OPTION(RECOMPILE)是有意義的。以我的經驗,這是唯一可行的選擇,是在使用動態SQL時。在探討這種情況是否對您有意義之前,我建議您重新構建統計信息。這可以通過運行以下命令來完成:


EXEC sp_updatestats

然后重新創建您的執行計劃。這將確保在創建執行計劃時,它將使用最新信息。


OPTION(RECOMPILE)每次查詢執行時,添加都會重建執行計劃。我從未聽說過將其描述為,creates a new lookup strategy但也許我們只是對同一件事使用不同的術語。


創建存儲過程時(我懷疑您是從.NET調用臨時sql,但如果使用的是參數化查詢,則最終將是存儲proc調用)SQL Server嘗試確定此查詢的最有效執行計劃根據數據庫中的數據和傳入的參數(parameter sniffing),然后緩存此計劃。這意味著,如果在數據庫中有10條記錄的地方創建查詢,然后在有100,000,000條記錄時執行查詢,則緩存的執行計劃可能不再是最有效的。


總結-我看不出有什么OPTION(RECOMPILE)好處。我懷疑您只需要更新統計信息和執行計劃即可。根據您的情況,重建統計信息可能是DBA工作的重要組成部分。如果您在更新統計信息后仍然遇到問題,建議您發布兩個執行計劃。


并回答您的問題-是的,我想說,每次執行查詢時,最好的選擇是重新編譯執行計劃是非常不尋常的。


查看完整回答
反對 回復 2020-02-04
  • 3 回答
  • 0 關注
  • 1417 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號