簡體   English   中英

mysql 如何/何時編譯存儲過程?

[英]How/when mysql compiles stored procedures?

我們打算使用 mysql 存儲過程來處理一個項目的所有數據庫工作。 有幾個應用程序(不同的語言)使用相同的數據庫,我很確定這些應用程序中有大量重復的 SQL 代碼。

然后在閱讀有關 mysq 的內容時,我偶然發現了
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
文章基本上說每次建立新的數據庫連接時都會編譯存儲過程。
mysql 會在數據庫上編譯所有(至少 3 位數字)存儲過程嗎?

不會。查詢和存儲過程是按需編譯的,然后在緩存中保存一段時間。 如果重復使用特定的存儲過程,將使用在緩存中編譯的版本,但如果它不再在緩存中,則必須首先編譯它,就像發送到數據庫的任何其他查詢一樣

MySQL 肯定不會做的是一次編譯所有 x 百個存儲過程 - 以防那是你所害怕的。

但這一切都有些無關緊要。存儲過程的優點是可以確保多個應用程序使用同一個數據庫,以相同的方式使用它。 當您的性能如此之高以至於您開始查看編譯緩存以提高速度時,您就看錯了地方。 通過查詢或數據庫重新設計可以更好地完成速度優化。

MySQL 不會一次編譯所有存儲過程。 它們將按需執行,如根據要求和您調用它們時的查詢。

但是,對於存儲過程,數據庫只編譯一次查詢計划並重用編譯過的過程。 這種預編譯可以產生顯着的性能優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM