Java Spring NamedParameterJdbcTemplate查询的性能非常慢

Java Spring NamedParameterJdbcTemplate查询的性能非常慢,java,oracle,spring,jdbc,spring-jdbc,Java,Oracle,Spring,Jdbc,Spring Jdbc,我正在从事一个需要JDBC调用Oracle数据库的项目。我已经建立了UCP池来与SpringJDBC合作。我有一个相当简单的查询,我正在执行如下 NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(datasource); Map<String,Object> paramMap = new HashMap<String,Object>(); paramMap.put("ids", Arr

我正在从事一个需要JDBC调用Oracle数据库的项目。我已经建立了UCP池来与SpringJDBC合作。我有一个相当简单的查询,我正在执行如下

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所在的表中选择*(: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());
NamedParameterJdbcTemplate=新的NamedParameterJdbcTemplate(数据源);
Map paramMap=新的HashMap();
paramMap.put(“id”,Arrays.asList(idArray));
List results=template.query(“从(:ids)中ID所在的表中选择*”,
paramMap,新的ResultRowMapper());
只要阵列中只有1个id,这一切都可以正常执行。当我添加第二个ID时,查询运行大约需要5分钟。如果我接受确切的查询并在SQLDeveloper中执行它,则需要.093秒

我的代码或配置一定出了严重问题。。。有人有什么想法吗

编辑:


我去掉了Spring名为parameterJDBCTemplate的用法,只使用了纯Jdbc,一切看起来都很好。名为ParameterJDBCTemplate的做法有什么不同?

在这种情况下,我发现了我的直接jdbc解决方案和spring jdbc解决方案之间的差异。。。正如下面@Annjawn所解释的,这似乎是一个绑定变量问题,而不是SpringJDBC问题。我的SpringJDBC问题是试图将一个变量绑定到一个索引(该索引不存在),从而进行表扫描

我的直截了当的JDBC解决方案最终只是做了一个字符串替换并按原样执行,因此没有表扫描

下面的链接解释了区别


这不是Spring jdbc与jdbc之争,而是任何绑定变量的问题。无论是SpringJDBC还是普通jdbc,如果在使用jdbc的java程序中存在绑定变量,那么这篇文章所说的基于成本的优化器都是正确的。我认为更多的是您的代码如何使用SpringJDBC。为什么不尝试使用
template.queryForList()
而不是
template.query()
查看结果呢。