我正在編寫一個軟件,它需要我準備語句並設置值,執行查詢並在循環中獲取結果。這個循環可能有超過7,000個週期。如果我使用簡單的語句而不是預先準備好的語句,執行速度是否會發生很大變化準備好的語句顯着減慢程序嗎?
這裏是僞代碼
- 從某處
- 迭代準備的語句
- 獲取列表通過列表
- 得到預處理語句,並做一些數據庫查詢和關閉新的資源,如結果集。
- 填充使用的結果和值從初始列表
由於地圖。
我正在編寫一個軟件,它需要我準備語句並設置值,執行查詢並在循環中獲取結果。這個循環可能有超過7,000個週期。如果我使用簡單的語句而不是預先準備好的語句,執行速度是否會發生很大變化準備好的語句顯着減慢程序嗎?
這裏是僞代碼
由於地圖。
預處理語句是重複任務更快。
http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html:
如果要執行Statement對象多次,它通常會降低使用PreparedStatement對象,而不是執行時間。
只是彈出一些東西:確保你沒有在你的循環中創建準備好的語句。涉及到一些開銷,但是在第三次查詢之後還是會自己支付的。實際上,對於大型參數列表,單個查詢甚至可能會更快。
一些東西,確實加快東西相當是運行在一個單一的所有查詢(或幾個大的)交易。如果它是大數據集,則可能每個事務有1000個查詢或類似的東西。 (當然,你的領域模型的語義必須允許這個,但以我的經驗來說,幾乎總是如此)。
查詢的數量,你可以在一個單一的交易成一團有點取決於數據庫所以一些實驗和閱讀也許需要。
你也可以考慮每條語句檢索多個值:
SELECT id, value FROM table WHERE id IN (?, ?, ?, ?, ?, ?)
這將是比個人的查詢速度更快。
這正是我所做的。 – mwangi 2010-09-17 08:16:59
我的觀點是你可以遍歷每個數據庫調用10個左右項目的列表。 – 2010-09-18 02:49:02
預處理語句通常是* *速度比普通的查詢,如果你重複運行相同的查詢。 – Amber 2010-08-28 07:59:57
性能不錯,但PreparedStatements的真正勝利是參數綁定可以通過API完成,而不是通過字符串連接完成。這對日期類型特別有用。還可以防止SQL注入攻擊。 – 2010-08-28 08:15:04
@amber,有一個準備開銷,可能需要一段時間才能在準備好的報表在牆上時間更快之前回購。 – 2010-08-28 08:39:26