为啥 jdbc 执行 sql server 过程需要 10 分钟,而 navicat 或 ssms 只需要 50 秒?

Posted

技术标签:

【中文标题】为啥 jdbc 执行 sql server 过程需要 10 分钟,而 navicat 或 ssms 只需要 50 秒?【英文标题】:Why jdbc executing sqlserver proceduce takes 10 min but navicat or ssms only 50s?为什么 jdbc 执行 sql server 过程需要 10 分钟,而 navicat 或 ssms 只需要 50 秒? 【发布时间】:2017-08-18 06:57:48 【问题描述】:

我在 java 中使用 sqlserver-jdbc 驱动程序执行查询,在返回结果集之前等待了大约 700 秒,但是当我使用 navicat 或 SSMS 执行此操作时只有 50 秒。任何人都有类似的问题,我找不到原因,因为我不太了解数据库,。

【问题讨论】:

我们需要更多信息来提供帮助。给我们看一些代码,什么查询运行缓慢? 【参考方案1】:

使用该脚本获取您的 SP 的缓存执行计划:

SELECT cp.objtype AS ObjectType,
OBJECT_NAME(st.objectid,st.dbid) AS ObjectName,
cp.usecounts AS ExecutionCount,
st.TEXT AS QueryText,
qp.query_plan AS QueryPlan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE objtype ='Proc' AND OBJECT_NAME(st.objectid,st.dbid) = '__YOUR_SP_NAME__';

我认为 SSMS 和 sqlserver-jdbc 驱动使用不同的缓存计划。

【讨论】:

以上是关于为啥 jdbc 执行 sql server 过程需要 10 分钟,而 navicat 或 ssms 只需要 50 秒?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段SQL在Mysql中正常执行并有结果而在JDBC中却报异常?

如何在 SQL Developer 中执行 SQL Server 存储过程?

如何在SQL Developer中执行SQL Server存储过程?

sqlserver profiler为啥跟踪不到自定义的存储过程执行情况

jdbc——java连接sql server 过程

SQL Server存储过程