簡體   English   中英

准備的語句和語句/查詢緩存

[英]Prepared Statement and Statement/Query Caching

我試圖了解在參數化准備好的語句的情況下,語句緩存是否有用。

根據我的理解

  • 如果使用緩存,則查詢將基於其“字符串”進行緩存。
  • 在這種情況下,如果查詢具有不同的參數值,則它是不同的/ new語句/字符串wrt緩存。
  • 同樣,當參數更改時,結果也會更改。
  • 由於准備好的語句是參數化的,因此在這種情況下使用緩存真的很有用。

我正在使用JDBC / Snaq數據庫池/ MySQL數據庫。

此處的語句緩存涉及兩種不同的情況:

我的困惑很簡單:

  • 如果要在緩存中搜索查詢/對應結果,我將基於字符串比較來搜索它。
  • 如果參數值更改,則查詢字符串也會更改。
  • 對於相同的查詢,這將導致在緩存中具有不同的參數值集的不同條目。

希望我澄清我的問題。

語句緩存是關於緩存執行計划的

JDBC查詢緩存是在事物的數據庫端完成的,它緩存execution plan ,而參數的值無關緊要,只是每次它們的順序相同。 如果這些值實際上很重要,則緩存任何內容都是沒有意義的。

很久以前,您必須使用PreparedStatements來緩存執行計划,但是自2005年至2008年以來,所有現代數據庫都值得一提的是緩存執行計划,無論執行的語句類型如何。

實際Java對象有一些最小的客戶端緩存,它們表示PreparedStatementCallableStatement但是在現代JDBC驅動程序中,任何實際的時間或空間節省都將是最小的。

在服務器端計算execution plan的開銷比在客戶端進行簡單的String操作要大幾個數量級。 這意味着使用PreparedStatement在客戶端沒有任何有意義的性能優勢,還有其他更重要的優勢,例如SQL Injection Protection可以證明使用它是合理的。

暫無
暫無

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

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