第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

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

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

溫溫醬 2020-02-04 16:19:03
我遇到了一種奇怪的情況,將OPTION (RECOMPILE)查詢追加到查詢中會(huì)使查詢?cè)诎朊雰?nèi)運(yùn)行,而忽略查詢會(huì)使查詢花費(fèi)超過(guò)五分鐘的時(shí)間。從Query Analyzer或C#程序通過(guò)執(zhí)行查詢時(shí),就是這種情況SqlCommand.ExecuteReader()。打電話(或不打電話)DBCC FREEPROCCACHE或DBCC dropcleanbuffers沒(méi)有區(qū)別;查詢結(jié)果總是在OPTION (RECOMPILE)不超過(guò)五分鐘的情況下即時(shí)返回。始終使用相同的參數(shù)調(diào)用該查詢(為了進(jìn)行此測(cè)試)。我正在使用SQL Server 2008。我對(duì)編寫SQL相當(dāng)滿意,但以前從未OPTION在查詢中使用過(guò)命令,并且在掃描此論壇上的帖子之前并不熟悉計(jì)劃緩存的整個(gè)概念。我從帖子中了解到,這OPTION (RECOMPILE)是一項(xiàng)昂貴的操作。顯然,它為查詢創(chuàng)建了新的查找策略。那么,為什么隨后的省略的查詢OPTION (RECOMPILE)是如此之慢呢?后續(xù)查詢是否應(yīng)該利用上一次包含重新編譯提示的調(diào)用所計(jì)算的查找策略?是否有一個(gè)查詢?cè)诿看握{(diào)用時(shí)都需要重新編譯提示是非常不尋常的嗎?對(duì)不起入門級(jí)的問(wèn)題,但我實(shí)在無(wú)法一馬當(dāng)先。更新:我被要求發(fā)布查詢...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)從查詢分析器運(yùn)行測(cè)試時(shí),我將在以下幾行前添加:declare @feedID intselect @feedID=20declare @feedDate datetimeselect @feedDate='1/2/2009'從我的C#程序調(diào)用它時(shí),參數(shù)通過(guò)SqlCommand.Parameters屬性傳遞。為了便于討論,您可以假設(shè)參數(shù)永遠(yuǎn)不會(huì)改變,因此我們可以排除次佳的參數(shù)氣味是造成這種情況的原因。
查看完整描述

3 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

有時(shí)候使用OPTION(RECOMPILE)是有意義的。以我的經(jīng)驗(yàn),這是唯一可行的選擇,是在使用動(dòng)態(tài)SQL時(shí)。在探討這種情況是否對(duì)您有意義之前,我建議您重新構(gòu)建統(tǒng)計(jì)信息。這可以通過(guò)運(yùn)行以下命令來(lái)完成:


EXEC sp_updatestats

然后重新創(chuàng)建您的執(zhí)行計(jì)劃。這將確保在創(chuàng)建執(zhí)行計(jì)劃時(shí),它將使用最新信息。


OPTION(RECOMPILE)每次查詢執(zhí)行時(shí),添加都會(huì)重建執(zhí)行計(jì)劃。我從未聽說(shuō)過(guò)將其描述為,creates a new lookup strategy但也許我們只是對(duì)同一件事使用不同的術(shù)語(yǔ)。


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


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


并回答您的問(wèn)題-是的,我想說(shuō),每次執(zhí)行查詢時(shí),最好的選擇是重新編譯執(zhí)行計(jì)劃是非常不尋常的。


查看完整回答
反對(duì) 回復(fù) 2020-02-04
  • 3 回答
  • 0 關(guān)注
  • 1413 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)