我知道已經有很多關於存儲過程和準備好的SQL語句的問題,但是我想找出一些不同的東西 - 如果一個過程中的預處理語句對這個存儲過程的性能有所貢獻,這意味着使它更好。存儲過程中準備好的SQL語句是否使性能更好?
我有這個問題,因爲我在搜索這些2技能的介紹時被告知以下幾點。
- 存儲過程將存儲和編譯一系列的語句在 分貝,這將減少傳輸&編譯的開銷。
- 準備語句將被編譯和緩存在db中,用於多個
訪問,從而導致更少的開銷。
我對這些'編譯','存儲'和'開銷'感到困惑 - 有點抽象。
我使用準備語句來避免重新解析,如果它會被頻繁調用。 但是,我應該在程序中使用預處理語句(緩存&編譯)嗎?由於我的程序已經被存儲和編譯爲數據庫,所以在內部準備好似乎沒有意義。(編譯什麼編制?)
編輯與示例代碼:
Create or Replace procedure MY_PROCEDURE
Begin
//totally meaningless here?
declare sqlStmt varchar(300);
declare stmt statement;
set sqlStmt='update MY_TABLE set NY_COLUMN=? where NY_COLUMN=?';
prepare stmt from sqlStmt;
execute stmt using 2,1
execute stmt using 4,3
..............
END
是在上面的一個比下面的更好,因爲它只分析語句一次?或者相同,因爲程序中的語句將被預編譯。
Create or Replace procedure MY_PROCEDURE
Begin
update MY_TABLE set NY_COLUMN=2 where NY_COLUMN=1;
update MY_TABLE set NY_COLUMN=4 where NY_COLUMN=3;
..............
END
個人,我不認爲什麼數據庫事宜...指出,如果我錯了 –
什麼**具體產品**你正在使用**最有可能**影響可以說!這些東西總是**高度供應商特定**,並且SQL Server的某些內容可能不適用於DB2或Oracle **(反之亦然)! –
@marc_s我同意,比如我的示例代碼只能運行在db2中。但我的問題是各種通用的,因爲許多流行的數據庫支持臨時SQL和程序。我猜不同的分貝處理的關鍵不會有太大的變化。如果我的問題的答案確實取決於所用的具體產品,例如不需要在SQL Server中準備,但它在DB2中有效,那麼我想知道相似性和差異。這些會幫助我。無論如何,我還沒有完成你之前發佈的答案。至少在閱讀時,我真的認爲它有幫助 - '這方面的一般信息仍然相關'。 –