PostgreSQLのPreparedStatement
StatementとPreparedStatementの処理速度が殆ど同じなんてすけれど、そーゆー実装になっているんでしょうか??
CREATE TABLE JDBCTEST ( ITEMID INTEGER NOT NULL ,NAME VARCHAR(255) NOT NULL ); CREATE INDEX JDBCTEST_IDX01 ON JDBCTEST ( ITEMID );
こんなテーブルを作って、次のコードでSELECTを発行しまくりました。
private String sSql1_ = "SELECT " + " JDBCTEST.ITEMID AS ITEMID" + " ,JDBCTEST.NAME AS NAME" + " FROM" + " JDBCTEST JDBCTEST" + " WHERE" + " JDBCTEST.ITEMID = "; private String sSql2_ = sSql1_ + "?"; // Statement public long test01(int iTimes) throws SQLException { long lStart = System.currentTimeMillis(); for (int i = 0; i < iTimes; i++) { Statement stmt = conn_.createStatement(); stmt.execute(sSql1_ + i); stmt.close(); // for oracle } long lTotal = System.currentTimeMillis() - lStart; System.out.println("Time test01: " + lTotal); return lTotal; } // PreparedStatement#setInt public long test02(int iTimes) throws SQLException { PreparedStatement pstmt = conn_.prepareStatement(sSql2_); long lStart = System.currentTimeMillis(); for (int i = 0; i < iTimes; i++) { pstmt.clearParameters(); pstmt.setInt(1, new Integer(i).intValue()); pstmt.executeQuery(); } pstmt.close(); long lTotal = System.currentTimeMillis() - lStart; System.out.println("Time test02: " + lTotal); return lTotal; }
test01よりtest02の方が圧倒的に早いだろうという目論見だったんですけれど、平均値が数ミリ秒しか違わないんでやんの。。。(確認したバージョンは、本体が7.3.2でJDBCドライバが7.3.1です)
ちなみに、Oracleではtest02の方が処理速度1/3でした。やっぱりそうなるよねぃ。。