Oracle SQL Query在JdbcTemplate& SimpleJdbcTemplate类

时间:2013-04-23 07:07:46

标签: sql oracle spring jdbc jdbctemplate

我们的应用程序中提供的使用SimpleJdbcTemplate的oracle SQL查询从未(几乎)出现。查询非常长,连接了近15个表,选择了大约100个字段,依此类推。

查询接近8500个字符,使用MapSqlParameterSource实例向其添加了6个绑定变量。虽然从不打印消息,但我已在Row Mapper方法调用中放入了足够的日志消息。

将绑定变量替换为实际值后,相同的SQL查询在SQL * Plus&中以5-7秒的结果生成结果。 SQL Developer。结果只有15条记录,因为我使用逻辑在SQL查询本身中实现分页支持。

我尝试了JDBCTemplate和amp; SimpleJdbcTemplate进行。 什么可能出错?

更新::

我能够缩小这个问题的范围。我的查询包含一个同义词作为LEFT OUTER JOIN(引用不同的模式表)正在减慢整个查询的速度。当我将此连接与绑定变量一起使用时,就会发生这种情况。当我在SQL Developer& amp;中编译绑定变量的值时SQL * Plus,查询运行正常。但是当我使用绑定变量时,同样的事情(悬挂情况)也发生在这些工具中。

目前我指的是以下链接来纠正我的dblink / synonym用法, Getting a ResultSet/RefCursor over a database link

谢谢,

1 个答案:

答案 0 :(得分:1)

如果两种不同的连接方法之间有不同的性能,请确保它们不会改变会话优化器设置。

也许你的jdbc代码以某种方式指定了optmizer模式,因此当你通过sqlplus连接时它是不同的形式。

alter session set OPTIMIZER_MODE = RULE;
alter session set OPTIMIZER_MODE = choose;

我在我们的环境中遇到了这样的问题,所以我确保所有连接都使用相同的优化设置。