主要實現(xiàn)的功能是事先通過條件篩選一部分id出來,在通過遍歷這些id找到相應(yīng)的Bfinalstatement,存為對象,放入list,但是發(fā)現(xiàn)數(shù)據(jù)量才達到1000時(1000個Bfinalstatement),給id設(shè)置了index,但需要的總查詢時間都還要500~600ms了,效率太低了,具體關(guān)鍵代碼如下,希望得到幫助,謝謝。(采用了dbcp連接池) @Override public BFinalStatement getFinalStatementFromId(String id) throws NamingException, SQLException { // TODO 得到乙方結(jié)算信息 Connection con = null; PreparedStatement pr = null; ResultSet rs = null; BFinalStatement fstate = null; sql = "select BConSelfID, PaidAmount, UnpaidAmount, InvoiceTotal, ShouldPay " + "from bfinalstatement where BConSelfID=?"; con = getConnection(); pr = con.prepareStatement(sql); pr.setString(1, id); rs = pr.executeQuery(); while (rs.next()) { fstate = new BFinalStatement(rs.getInt("PaidAmount"),rs.getString("BConSelfID")); fstate.setInvoiceTotal(rs.getInt("InvoiceTotal")); fstate.setShouldpay(rs.getInt("ShouldPay")); fstate.setUnpaidAmount(rs.getInt("UnpaidAmount")); } // 釋放連接 close(con, rs, pr); return fstate; }
2 回答

肥皂起泡泡
TA貢獻1829條經(jīng)驗 獲得超6個贊
單個查當(dāng)然慢了,你這個sql就算只要1毫秒,執(zhí)行1000次也1秒了。用where BConSelfID in ()來批量處理會快些,但注意in里面不要太多個ID,一次100一共取10次差不多。
再慢的話就要善用緩存了

守候你守候我
TA貢獻1802條經(jīng)驗 獲得超10個贊
-- 修改 BConSelfID = 'xxx'
-- 執(zhí)行以下SQL,將結(jié)果貼出來:
explain select BConSelfID, PaidAmount, UnpaidAmount, InvoiceTotal, ShouldPay
from bfinalstatement where BConSelfID = 'xxx'
添加回答
舉報
0/150
提交
取消