我正在处理一个需要JDBC调用Oracle数据库的项目。我已经建立了UCP池与SpringJDBC合作。我有我执行类似下面的相当简单的查询...Spring NamedParameterJdbcTemplate查询的性能很慢
SELECT * FROM TABLE WHERE ID IN (:ids)
我的Java代码来设置此查询了如下所示...
NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(datasource);
Map<String,Object> paramMap = new HashMap<String,Object>();
paramMap.put("ids", Arrays.asList(idArray));
List<Result> results = template.query("SELECT * FROM TABLE WHERE ID IN (:ids)",
paramMap, new ResultRowMapper());
这一切都进行罚款只要在阵列中只有一个id。当我添加第二个ID时,查询需要将近5分钟才能运行。如果我采用确切的查询并在SQLDeveloper中执行它,则需要0.093秒。
一些东西一定会严重地错误与我的代码或配置......有没有人有任何想法?
编辑:
我剥出春天是NamedParameterJdbcTemplate的使用,并只用简单的JDBC去,一切似乎进行巨大。 NamedParameterJdbcTemplate在做什么不同?
它不是Spring-jdbc vs jdbc,它的任何绑定变量问题。无论是spring-jdbc还是纯jdbc,如果在使用jdbc的java程序中都存在绑定变量,那么文章中关于基于成本的优化程序所说的内容是否属实。我会更多地考虑你的代码如何与spring-jdbc一起工作。为什么不尝试使用'template.queryForList()'而不是'template.query()'来查看结果。 – Annjawn 2012-08-08 21:14:15
@Annjawn好点,会更新答案 – theMothaShip 2012-08-08 21:17:23