SQL Server 存储过程在 SSMS 中运行速度很快,在应用程序中运行速度很慢 [重复]

Posted

技术标签:

【中文标题】SQL Server 存储过程在 SSMS 中运行速度很快,在应用程序中运行速度很慢 [重复]【英文标题】:SQL Server stored procedure runs fast in SSMS and slow in application [duplicate] 【发布时间】:2019-01-28 11:00:37 【问题描述】:

我有一个带有 SQL express DB 的 C# WinForms 应用程序,

我有一个包含 20 列和 2 个缺少记录的表,该表有 6 个索引,1 个是聚集索引,5 个是非聚集索引。

在 5 个索引中,3 列是 varchar 数据类型,1 列是位,1 列是数字数据类型。

我的应用场景是

我们有 2 个应用程序和 PC,这两个 PC 运行不同的应用程序并访问位于 PC 1 的单个 DB-

两个应用程序都在持续运行,并在数据库中找到“UPDATE”记录,有时还有“SELECT”一些记录。

我们不关心更新语句,但是每当应用程序点击选择查询时,有时应用程序会花费比正常时间更多的时间,我非常关心选择语句的结果。下面是我从存储过程中调用的查询。

SELECT Count(PrimaryKey) as CNT From Tabel where Col1 ="AAAAAAAA" 
and (Col2 =0 OR Col2 is null) and Col3 =0 

大多数情况下,SP 给出的结果是 1 或 2 毫秒,但有时需要 45,60、90,189、260 等毫秒,这对我的应用程序没有用处

我在第二台通过 LAN 远程访问数据库的 PC 上遇到了这个问题。

执行时间已由我的应用程序和 SQL Profiler 维护的应用程序日志确认。

我的预期结果是 1 到 30 毫秒不超过 30,

请帮助我获得一致的时间结果。

非常感谢您。

谢谢,

萨加尔·克勒卡。

【问题讨论】:

请用谷歌搜索“SQL Server 存储过程在 SSMS 中运行速度很快,在应用程序中运行速度很慢”,这在很多很多地方都有很好的解释 亲爱的 Selvin,我已经检查了在堆栈溢出和其他论坛上发布的所有选项,这些选项没有解决我的问题, 这个问题目前被标记为重复的 3 个主题中有大量资源。如果您觉得这些(或其他)问题都没有回答您的问题,那么请发布一个新问题。但是,当您这样做时,请确保包含上述问题中列出的所有您尝试过的内容(您更改的 SQL/asp.net 代码、您调整的设置等);其中包括链接文章中的部分,例如 Erland Sommarsko 的文章,这是关于行为的非常有用的信息。 亲爱的 Larnu,我已经尝试了你和其他人发布的大多数选项,但没有解决我的问题,关于 Erland Sommarsko 帖子提到的问题是在几秒钟内得到结果,我预计在毫秒内这是不一致的。我还解释了我的整个应用程序并在那里执行。请通过它。 【参考方案1】:

Slow in the Application, Fast in SSMS? Understanding Performance Mysteries

一般来说,它通常与 SET 选项有关。

SSMS 有自己的 SET 值,您的应用可能缺少这些值。

只需在 SSMS 和您的应用程序中运行 DBCC USEROPTIONS 并比较它们

【讨论】:

亲爱的 Alexander,我已经设置了 ANSI_NULLS ,QUOTED_IDENTIFIER ,NOCOUNT 和 arithabort,请建议我需要设置更多,请注意: - 根据其他帖子的建议,我每个都遇到过一两次问题db 上的 100 或 200 次点击。我也预计会以毫秒为单位。

以上是关于SQL Server 存储过程在 SSMS 中运行速度很快,在应用程序中运行速度很慢 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 索引重新创建存储过程慢

理解性能的奥秘——应用程序中慢,SSMS中快——SQL Server如何编译动态SQL

SQL Server 存储过程在第一次运行时需要很长时间

如何从 SQL Server Management Studio 中的表生成 CRUD 存储过程

存储过程中的动态 SQL 不返回结果集;在 SSMS 中运行时,我得到了结果

在 SQL Server Management Studio 中调试存储过程