我有幾個關於Microsoft SQL Server 2008性能的問題,主要是關於執行計劃。SQL執行計劃緩存
據,以MSDN,相比直接的SQL查詢存儲過程中有更好的表現,這是因爲:
數據庫可以準備,優化和緩存的執行計劃,使執行計劃可以在被重用晚點。
我的第一個問題是爲什麼會出現這種情況。我以前讀過使用參數化查詢(預準備語句)時,執行計劃被緩存以用於具有可能不同的值(執行上下文)的後續執行。存儲過程是否仍然更高效?如果是這樣,一個存儲過程的執行計劃是否只是按需重新創建,還是不太可能從緩存中清除?是否將參數化查詢視爲ad-hoc query,這意味着執行計劃更可能從緩存中清除?
此外,由於我仍然是這個領域的新手,我想知道是否有某些命令只能在T-SQL中工作。我有一個查詢需要大約12秒才能完成第一次運行,然後在〜3秒之後,在Microsoft SQL Management Studio和ADO.NET中完成。作爲我的演示文稿的一部分,查詢應該是無效的。問題是,在我的查詢中,我使用CHECKPOINT
和DBCC DROPCLEANBUFFERS
,this article和OPTION (RECOMPILE)
。但是,至少前兩個似乎沒有什麼區別,因爲查詢仍然需要3秒。我的猜測是,這是由於數據緩存未被清除。任何想法爲什麼緩存似乎沒有被清除,或者有關爲什麼我的查詢在第一次執行後顯着更快的想法?
這些是我現在可以想到的問題。
好問題 - 我會將這篇文章分成幾篇文章,也許有一篇關於存儲過程與參數化查詢的問題,一篇文章針對查詢的多次運行等等。 –
也許你是對的;我的腦海裏想着不要垃圾郵件。 :-) – Andy0708
stackoverflow的想法是保持焦點的問題,以便反過來也可以集中答案 - 所以不要擔心加載一堆問題的網站 –