【问题标题】:Spring JdbcTemplate is extremely slow when call SQLserver Stored procedureSpring JdbcTemplate 调用 SQLserver 存储过程时速度极慢
【发布时间】:2020-08-31 07:47:13
【问题描述】:
我正在使用 JdbcTemplate.execute() 调用与 SQLServer 数据库连接的 SP。
使用相同的参数,当我直接在 SQL Server Management Studio 中执行 SP 时,它会在 1 秒内完成,但是当我在 java 中使用 JdbcTemplate 时,它会在几分钟内执行,导致严重的性能问题。
注意存储过程包含“SET ANSI_NULLS ON”和“SET QUOTED_IDENTIFIER ON”
【问题讨论】:
标签:
java
spring
jdbctemplate
【解决方案1】:
经过一番测试,我终于发现问题在于我的SP中的空白值判断:
我有一些SP的默认参数并将它们设置为@A nvarchar(255)='',然后在逻辑过程中我需要将它们用作逻辑条件:if(@A is not null and rtrim(ltrim( @A)) '')
就这么简单,它在 Management Studio 中运行良好。
在将初始化更改为@A nvarchar(255) 并使用 if(@A is not null) 后,它还会在 JdbcTemplate 中返回结果...所以 JdbcTemplate 应该有一些内部逻辑来执行空检查但是我不确定为什么以及如何。