我们的应用程序中提供的使用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
谢谢,
答案 0 :(得分:1)
如果两种不同的连接方法之间有不同的性能,请确保它们不会改变会话优化器设置。
也许你的jdbc代码以某种方式指定了optmizer模式,因此当你通过sqlplus连接时它是不同的形式。
alter session set OPTIMIZER_MODE = RULE;
alter session set OPTIMIZER_MODE = choose;
我在我们的环境中遇到了这样的问题,所以我确保所有连接都使用相同的优化设置。