Spring NamedParameterJdbcTemplateを使用して、テーブルからいくつかの値をフェッチしています。何らかの理由で、SQL Management Studioで同じクエリを実行するのとは対照的に、Javaアプリではクエリの実行が非常に遅くなります。また、プロファイラーで、準備されたステートメントが再利用されないことに気づきました。JAVAアプリで同じクエリを複数回実行すると、異なるプリペアドステートメントが実行されているのがわかります。したがって、ステートメントが再利用されない理由がわかりません。クエリでIN句を使用しているため、パフォーマンスが低下しますか?
これが私のサンプルJavaコードです
StringBuilder vQuery = new StringBuilder();
vQuery.append(" SELECT SUM(Qty) FROM vDemand");
vQuery.append(" WHERE ProductID = :ProductID");
vQuery.append(" AND [Date] >= :StartDate AND [Date] <= :EndDate");
vQuery.append(" AND CustomerID IN ( :CustomerID )");
MapSqlParameterSource vNamedParameters = new MapSqlParameterSource();
vNamedParameters.addValue("ProductID", aProductID);
vNamedParameters.addValue("CustomerID", aCustomerlIDs);
vNamedParameters.addValue("StartDate", aDate, Types.TIMESTAMP);
vNamedParameters.addValue("EndDate", aDate, Types.TIMESTAMP);
int vTotalQuantity = this.getNamedParameterJdbcTemplate().queryForInt(vQuery.toString(), vNamedParameters);
return vTotalQuantity;