2013-09-29 173 views
-2

我讀到來自谷歌「語句高速緩存」和維基,但我無法理解數據庫「語句高速緩存」,根據谷歌「語句緩存」的意思是: -這是什麼意思「語句緩存」?

數據庫被調整到do語句緩存。它們通常包含一些 種語句緩存。該緩存使用該語句本身作爲密鑰 ,並將訪問計劃與相應的 語句一起存儲在緩存中。這允許數據庫引擎重用以前執行的 語句的計劃。例如,如果我們向數據庫發送了 數據庫,例如「select a,b from t where c = 2」,然後 ,則會計算出的訪問計劃被緩存。如果我們稍後發送相同的語句 ,數據庫可以重用先前的訪問計劃,從而節省我們的CPU功耗。但請注意,整個陳述是關鍵。例如,如果我們稍後發送語句「select a,b from t where c = 3」,它將找不到訪問計劃。這是因爲「c = 3」是 不同於緩存的計劃「c = 2」。因此,舉例來說:

For(int I = 0; I < 1000; ++I) 
    { 
      PreparedStatement ps = conn.prepareStatement("select a,b from t where c = " + I); 
      ResultSet rs = Ps.executeQuery(); 
      Rs.close(); 
      Ps.close(); 
    } 

這裏將不使用緩存。循環的每次迭代都會向數據庫發送一個不同的SQL語句 。對於每次迭代,計算新的訪問計劃爲 ,我們基本上使用 這種方法拋出CPU週期。然而,看下面的代碼片段:PreparedStatement ps = conn.prepareStatement(「select a,b from t where c =?」);

For(int I = 0; I < 1000; ++I) { 
     ps.setInt(1, I); 
     ResultSet rs = ps.executeQuery(); 
     Rs.close(); } 

ps.close();這樣會更有效率。聲明發送到 數據庫使用'?'參數化標記在sql中。這個 意味着每一次迭代都發送相同的語句到數據庫 用「c =?」的不同參數部分。這允許數據庫 重複使用語句的訪問計劃,並使程序 在數據庫內更有效地執行。這基本上讓我們 您的應用程序運行速度更快,或使更多的CPU可用數據庫的用戶 。

但我不明白這個代碼有人給我任何想法上面這一行。

+0

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html對它進行了很好的解釋。 –

+0

你不明白什麼?請提出具體問題,我會盡量回答。但是,如果我發表一個長時間的解釋,你可能會說「我也不明白這一點」;我的時間將會被浪費。因此,請再次嘗試閱讀並理解該鏈接,並思考我需要回答什麼問題才能幫助您理解。 –

回答

1

將SQL轉換爲實際操作需要時間和精力。通過記錄給定SQL語句的結果,如果再次發出相同的SQL語句,則可以輕鬆地重新使用這些操作,從而爲您提供更快的響應。

緩存是這種時間保護程序的集合。

準備好的聲明是一個帶有爲此設計的佔位符的特殊變體。然後爲每個請求提供佔位符,而不必每次都重做「理解此SQL」部分。