gpt4 book ai didi

java - Spring NamedParameterJdbcTemplate 查询的性能非常慢

转载 作者:行者123 更新时间:2023-12-03 03:55:56 27 4
gpt4 key购买 nike

我正在开发一个需要对 Oracle 数据库进行 JDBC 调用的项目。我已经设置了 UCP 池来与 SpringJDBC 一起使用。我有一个相当简单的查询,我正在执行如下...

从表中选择 *,其中 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());

只要数组中只有 1 个 id,这一切都可以正常执行。当我添加第二个 ID 时,查询需要近 5 分钟才能运行。如果我采用精确的查询并在 SQLDeveloper 中执行它,则需要 0.093 秒。

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

编辑:

我去掉了 Spring NamedParameterJdbcTemplate 的使用,直接使用 Jdbc,一切似乎都表现得很好。 NamedParameterJdbcTemplate 的做法有何不同?

最佳答案

嗯,在这种情况下,我发现了我的直接 jdbc 解决方案和 spring-jdbc 解决方案之间的区别...看来正如下面的 @Annjaawn 所解释的,这是一个绑定(bind)变量问题而不是 spring-jdbc 问题。我的 spring-jdbc 问题是尝试将变量绑定(bind)到索引(不存在),从而进行表扫描...

我的直接 JDBC 解决方案最终只是进行字符串替换并按原样执行,因此没有表扫描...

下面的链接解释了其中的差异。

http://bytes.com/topic/oracle/answers/65559-jdbc-oracle-beware-bind-variables

关于java - Spring NamedParameterJdbcTemplate 查询的性能非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11869899/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com