Spring JdbcTemplate 在调用 SQLserver 存储过程时非常慢
Spring JdbcTemplate is extremely slow when call SQLserver Stored procedure
我正在使用 JdbcTemplate.execute() 调用与 SQLServer 数据库连接的 SP。
使用相同的参数,当我在 SQL Server Management Studio 中直接执行 SP 时,它会在 1 秒内完成,但是当我在 java 中使用 JdbcTemplate 时,它会执行几分钟,导致严重的性能问题。
注意存储过程包含“SET ANSI_NULLS ON”和“SET QUOTED_IDENTIFIER ON”
经过一些测试,我终于发现问题出在我的SP中的空值判断上:
我有一些SP的默认参数并将它们设置为@A nvarchar(255)='',然后在逻辑过程中我需要将它们用作逻辑条件:if(@A is not null and rtrim( ltrim(@A)) <>'')
就这么简单,它在 Management Studio 中运行得非常好。
将 init 更改为 @A nvarchar(255) 并使用 if(@A 不为空) 后,它还会 returns JdbcTemplate 中的结果...因此 JdbcTemplate 应该有一些内部逻辑做那个空支票,但我不确定为什么以及如何。
我正在使用 JdbcTemplate.execute() 调用与 SQLServer 数据库连接的 SP。 使用相同的参数,当我在 SQL Server Management Studio 中直接执行 SP 时,它会在 1 秒内完成,但是当我在 java 中使用 JdbcTemplate 时,它会执行几分钟,导致严重的性能问题。
注意存储过程包含“SET ANSI_NULLS ON”和“SET QUOTED_IDENTIFIER ON”
经过一些测试,我终于发现问题出在我的SP中的空值判断上:
我有一些SP的默认参数并将它们设置为@A nvarchar(255)='',然后在逻辑过程中我需要将它们用作逻辑条件:if(@A is not null and rtrim( ltrim(@A)) <>'') 就这么简单,它在 Management Studio 中运行得非常好。
将 init 更改为 @A nvarchar(255) 并使用 if(@A 不为空) 后,它还会 returns JdbcTemplate 中的结果...因此 JdbcTemplate 应该有一些内部逻辑做那个空支票,但我不确定为什么以及如何。