2012-04-12 98 views
0

有什麼辦法來提高預處理語句的性能嗎?這是關於許多選擇查詢。我做這樣的查詢:PreparedStatement性能調優

String query = "SELECT NAME, ADDRESS " 
       + "FROM USERS " 
       + "where ID = ? " 
       + "group by NAME, ADDRESS"; 

PreparedStatement pstmt = connection.prepareStatement(query); 

for(long id: listIDs){ 
    pstmt.setLong(1, id); 
    ResultSet rs = pstmt.executeQuery(); 

    ... 
} 

該數據庫是MySQL。

+0

你在使用什麼數據庫? – 2012-04-12 15:39:54

+0

@NickHolt我更新我的問題。數據庫是MySQL。 – 2012-04-12 19:28:12

回答

1

兩個建議:

  1. 確保ID字段建立索引。
  2. 將許多小型查詢合併爲一個,例如使用WHERE ID IN (...)

關於後者的更詳細討論,請參閱Batching Select Statements in JDBC

+0

如果您使用的是Oracle,您可以創建一個自定義類型,它是一個數組數組,並加入到它中 - 它會比IN更好地執行,並且不太容易發生注入攻擊(只有當您的id是'VARCHAR'時) 。 – 2012-04-12 15:38:02

2

準備查詢的服務器(這就是爲什麼你需要連接)。爲了提高準備語句的性能,您必須調整數據庫服務器本身(索引等)。

另一種方法是編寫只能得到你想要的結果的查詢。

另一個想法是在客戶端緩存你知道你將會使用很多的數據,這樣你就不會一次又一次地向數據庫查詢相同的數據。

0

您可能還想調查您的JDBC驅動程序是否支持語句緩存。我知道oracle的JDBC驅動程序支持。