Estoy utilizando Spring NamedParameterJdbcTemplate para recuperar algunos valores de una tabla. Por alguna razón, la consulta se ejecuta muy lento en mi aplicación Java en lugar de ejecutar la misma consulta en SQL Management Studio. También noté que en el generador de perfiles, las declaraciones preparadas no se reutilizan. Si ejecuto la misma consulta en mi aplicación JAVA varias veces, veo que se ejecutan diferentes declaraciones preparadas. Entonces, no estoy seguro de por qué las declaraciones no se vuelven a utilizar. ¿El rendimiento es lento porque estoy usando una cláusula IN en mi consulta?Spring NamedParameterJDBCTemplate reutilización de las declaraciones preparadas
Aquí está mi ejemplo de código 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;
Gracias. Lo extraño que veo es que, incluso para una sola consulta, el tiempo de ejecución es aproximadamente 50 veces mayor que el tiempo de ejecución en el estudio de administración de servidor sql. Trataré de deshacerme de los parámetros de Nombre y ver si un sql directo soluciona el problema. gracias de nuevo. – user320587
Creo que es un problema diferente, verifique la configuración de su controlador jdbc. Cree un nuevo proyecto con el controlador y un método principal que solo ejecute la consulta, sql simple. 50 veces más lento es demasiado. – Luciano