2012-12-20 20 views
0

這是與問題here有關的問題,我的問題是來自Java應用程序的視角。 如何優化查詢數據庫,如果我有一個web服務從數據庫返回數據取決於客戶端允許獲取什麼?從JDBC SQL中省略列SELECT選擇過早優化?

  • 在Java代碼中使用最大的一組列和過濾器值進行選擇是否合理?
  • 或者是更好地構建許多SQL PreparedStatements/NativeQueries,每個只會詢問將真正返回的列嗎?
  • 是一個很好的折衷方案來構造基本查詢只由連接的表而不是選定的列確定(這些都是)?

對於數據庫和可維護應用程序都有什麼好處?我現在所知道的:

  • 大多數JDBC驅動程序/ SQL數據庫優化SQL查詢並緩存未來請求的優化版本。每一個新的查詢都必須進行分析和比較,必須找到或創建優化版本......並保存在內存中......最壞的情況下,每個新變種都會生成新的優化版本。將這些簡單選擇相同的優化版本?
    select name, surname from person
    select name from person
  • 寫選擇的多種變體是醜陋的 - 每一個變種都必須經過測試,維護,快...

回答

0

取決於通常是最好的,從性能的角度來看,在過濾數據庫。如果這太牽扯,可能會更好從可讀性的角度來做到這一點在客戶端。

1

不,這不是一個過早的優化。只讀取感興趣的列;提取不感興趣的列會增加網絡往返次數,這會影響性能。

獲取額外的列還可以防止數據庫在可能僅需要訪問索引的情況下可能消除對錶的訪問。