为什么与 SqlCommand 一起使用时某些 sql 查询会慢很多?

2024-01-01

我有一个存储过程,它从 Sql Server Management Studio 执行的速度比使用以下命令运行时快得多(2 秒)System.Data.SqlClient.SqlCommand(2 分钟后超时)。

这可能是什么原因?


细节: 在 Sql Server Management Studio 中,这将在 2 秒内运行(在生产数据库上):


EXEC sp_Stat
    @DepartmentID = NULL
  

在 .NET/C# 中,以下情况会在 2 分钟后超时(在生产数据库上):

string selectCommand = @"
EXEC sp_Stat
    @DepartmentID = NULL";
string connectionString = "server=***;database=***;user id=***;pwd=***";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    using (SqlCommand command = new SqlCommand(selectCommand, connection))
    {
        connection.Open();
        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
            }
        }
    }
}

我也尝试过selectCommand = "sp_Stat", CommandType = StoredProcedure, 和SqlParameter,但结果是一样的。

并且没有EXEC也是同样的结果。

在几乎数据为空的开发数据库上,这两种情况都在不到 1 秒的时间内完成。所以这与数据库中有大量数据有关,但它似乎只发生在.NET中......


马克·格拉维尔 (Marc Gravell) 所写的不同内容SET值在所呈现的情况下有所不同。

SQL Server Profiler 显示 Sql Server Management Studio 运行以下内容SET.NET Sql Client Data Provider 没有:


SET ROWCOUNT 0 
SET TEXTSIZE 2147483647 
SET NOCOUNT OFF 
SET CONCAT_NULL_YIELDS_NULL ON 
SET ARITHABORT ON 
SET LOCK_TIMEOUT -1 
SET QUERY_GOVERNOR_COST_LIMIT 0 
SET DEADLOCK_PRIORITY NORMAL 
SET TRANSACTION ISOLATION LEVEL READ COMMITTED 
SET ANSI_NULLS ON 
SET ANSI_NULL_DFLT_ON ON 
SET ANSI_PADDING ON 
SET ANSI_WARNINGS ON 
SET CURSOR_CLOSE_ON_COMMIT OFF 
SET IMPLICIT_TRANSACTIONS OFF 
SET QUOTED_IDENTIFIER ON
SET NOEXEC, PARSEONLY, FMTONLY OFF

当我包含这些时,相同的查询在 SSMS 和 .NET 中花费相同的时间。 以及负责人SET is ...

SET ARITHABORT ON

我学到了什么?也许使用分析器而不是猜测......

(最初的解决方案似乎与参数嗅探有关。但我混淆了一些东西......)


另一件重要的事情是the SET options http://msdn.microsoft.com/en-us/library/ms190356.aspx已启用的。其中一些选项足以更改查询计划以更改配置文件。如果您正在查看(例如)计算的+持久的(并且可能是索引的)列,有些可能会产生巨大的影响:如果SET选项不兼容,可以强制重新计算值,而不是使用索引值 - 这可以将索引查找更改为表扫描+计算。

尝试使用分析器看看会发生什么SET选项“正在发挥作用”,看看使用这些选项是否会改变事情。

另一个影响是连接字符串;例如,如果启用 MARS,可以以微妙的方式改变行为。

最后,交易(隐式(TransactionScope) 或显式) 可以有huge影响,具体取决于隔离级别。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么与 SqlCommand 一起使用时某些 sql 查询会慢很多? 的相关文章

  • 如何填充 ToolStripComboBox?

    我发现它很难将数据绑定到ToolStripComboBox 好像没有这个ValueMember and DisplayMember特性 怎么绑定呢 访问toolstripcombobox中包装的组合框并访问其ValueMember Disp
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 在Linux中,找不到框架“.NETFramework,Version=v4.5”的参考程序集

    我已经设置了 Visual studio 来在我的 Ubuntu 机器上编译 C 代码 我将工作区 我的代码加载到 VS 我可以看到以下错误 The reference assemblies for framework NETFramewo
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • DataTable.GetChanges() 不断返回 NULL

    我正在尝试获取存在于的所有行allData但不在removeData public static DataTable RemoveDuplicateRows DataTable allData DataTable removeData re
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • WCF服务健康状况监控

    我刚刚实现了 WCF 服务 目前正在研究服务监控选项 我们的服务器团队目前仅托管 java 服务 希望我们的实例始终运行 因此它可以在该实例的生命周期内收集数据 他们表示将使用我们的 webmon 操作之一来获取统计信息 但我们正在使用每次
  • 如何使用 C# 连接到 Asana Rest API?

    有谁有使用 C 连接到 Asana API 的代码片段吗 他们的网站上有一个 Hello World 应用程序 但不幸的是它是用 ruby 编写的 https asana com developers documentation examp
  • MongoDb 注册类映射

    我有以下代码 我希望 MiscellaneousData 覆盖抽象的 MiscellaneousDataBase 然而 IdMemberMap 总是出现空值 使用独立的 正常 类是可行的 if BsonClassMap IsClassMap
  • MySQL NOT IN 来自同一个表中的另一列

    我想运行 mysql 查询来选择表中的所有行films其中的值title该列不存在于另一列的所有值中的任何位置 collection 这是我的表格的简化版本 其中包含内容 mysql gt select from films id titl
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 在 C# 中将 ANSI (Windows 1252) 转换为 UTF8

    I ve 之前问过这个 https stackoverflow com q 4351985 398713之前在 Stack Overflow 上以一种迂回的方式 这次想把它做好 如何将 ANSI 代码页 1252 转换为 UTF 8 同时保
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程
  • 如何在 SQL Server 2012 中选择除一列之外的所有列? [复制]

    这个问题在这里已经有答案了 有没有一种方法可以选择所有列 但只选择我不想选择的特定列 我的意思是有时我会遇到这样的问题 表有数百个字段 而我只需要删除一个字段 我需要重写所有列吗 有什么窍门吗 喜欢select
  • ASP.net 出现错误“访问路径被拒绝”。尝试将文件上传到我的 Windows Server 2008 R2 Web 服务器时

    我有一个 ASP NET Web 应用程序 它将文件上传到 Web 服务器上的特定文件夹 本地一切工作正常 但是当我将应用程序部署到 Web 服务器时 我开始收到错误 访问路径 D Attachments myfile doc 被拒绝 我向
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • MS Teams 应用程序:访问此应用程序时出现问题

    The users on MS Teams desktop reported multiple issues with our MS Teams app They see the following error on MS Teams De
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表

随机推荐

  • Python Shutil.copytree() 可以跟踪复制的状态

    我的目录中有很多光栅文件 600 我需要将它们复制到新位置 包括它们的目录结构 有没有办法使用shutil copytree 来跟踪复制的状态 通常对于文件我会使用下面的代码 但不知道如何使用shutil copytree 做同样的事情 f
  • 如何判断宽度是px还是%

    我如何判断 css 属性是否如宽度 ex width 100 已为其指定 px 或 例如 在 Chrome 中 如果我有width 250px 我愿意 div width i get 250而如果我使用百分比 我只需根据屏幕分辨率获取百分比
  • 基于 GWT Servlet 的通知(服务器事件总线)

    谁能想到一个好方法让服务器根据服务器处理情况通知客户端 例如 考虑以下事件 用户请求删除数据 但是由于其运行时间较长 我们将其放入队列中 客户收到 是的 我们成功完成了您的交易 服务器删除该项目 现在想要更新任何客户端可能正在使用的任何本地
  • Emacs 设置哪个功能模式

    我希望在打开 Emacs 时默认启用哪个功能模式 我已将以下行添加到我的 emacs 文件中 setq which func mode t setq which function mode t 当我打开 cpp 文件并导航到函数主体时 我没
  • 数据集不适合内存

    我有一个MNIST像不适合内存的数据集 进程内存 not gpu记忆 我的数据集是 4GB 这不是一个TFLearn issue 据我所知model fit需要一个array for x and y TFLearn 示例 model fit
  • 编译时的模板和 constexpr 推导取决于编译器和优化标志

    以下问题是从更大的代码浓缩而来的 因此 有些表达式看似多余或不必要 但对原始代码至关重要 考虑有一个结构体 其中包含编译时常量和一个简单的容器类 template
  • 哪些 Ruby gem 支持 Facebook API?

    我有一个使用 Facebook API 的 Rails 应用程序 我见过几种不同的用于与 Facebook 集成的 Ruby gem 但它们看起来已经过时了 最好自己编写低级调用吗 有没有合适且当前的宝石可用 这些宝石最近有变化吗 我正在开
  • Puppeteer - 无限滚动的情况

    我想继续向下滚动 直到所有具有特定类名的元素都加载到动态 HTML 环境中 这是我使用的代码 while await page xj7 length lt counter await page evaluate gt window scro
  • JPA持久化后如何从数据库获取值

    如何获取保存到数据库后的值 entityManager persist 在调用 persist 之后 我能够从数据库获取主键值 而不是任何其他值 例如 public void create Project project entityMan
  • GroupBy 查询和位字段

    我正在使用实体框架核心 2 1 我有一个数据库上下文 其中包含一个模型的访问器 该模型包含一个布尔字段 该字段在 MS SQL 数据库中表示为不可为空的位字段 我想构建一个在 SQL 中高效计算的查询 该查询为我提供表中所有行以及启用了位列
  • 公开 WCF 服务以便可以轻松地从 Java/CXF 使用它的最佳方法是什么?

    我们编写了一个供 Java 商店使用的 WCF 服务 该商店使用 CXF 生成适配器 我们对 Java 不太熟悉 但已经使用 basicHttpBinding SSL 和基本身份验证公开了该服务 集成测试表明 NET 客户端可以很好地使用该
  • 如何在不使用Eclipse的情况下添加带有资源的Android库

    我想设置 Android v7 appcompat 库以便使用 ActionBar 在 http developer android com tools support library setup html http developer a
  • 有没有办法将 pyspark 数据帧写入 redis 的 azure 缓存?

    我有一个包含 2 列的 pyspark 数据框 我为 Redis 实例创建了一个天蓝色缓存 我想将 pyspark 数据帧写入 redis 其中数据帧的第一列作为键 第二列作为值 我怎样才能在天蓝色中做到这一点 您需要利用这个库 https
  • 使用嵌入式 jetty 服务器运行 Web 应用程序 (WAR)

    我制作了一个非常基本的 Web 应用程序 只有一个 html 页面 我把它作为战争输出了 现在我创建了一个嵌入式码头服务器 public class SimplestServer public static void main String
  • Ruby/Rails - Shrine::Error(存储:缓存未在 PdfUploader 上注册)

    我一直在努力弄清楚为什么我在 Heroku 上收到此错误 Shrine Error storage cache isn t registered on PdfUploader 初始化器 rb require shrine require s
  • Mysql 从 enum 到tinyint 问题

    我有一张桌子 terms of payment enum 0 1 NOT NULL DEFAULT 0 COMMENT I run ALTER TABLE customer CHANGE terms of payment terms of
  • 如何检测是否从儿童活动中回来?

    如何检测在按子活动的后退按钮后活动是否获得焦点 以及当时如何执行一些代码 一种可能性是开始您的孩子活动startActivityForResult http developer android com reference android a
  • TGLAugmentedRealityView 类似 Android 的库吗? (相机预览上的位置)

    所以我想为 Android 使用一个非常相似的库 就像TGL增强现实视图 https github com gleue TGLAugmentedRealityView It s 根据您和目标的位置将视图弹出到相机预览中 我几乎找不到任何对
  • 删除邮政编码中的 -####

    如何在Python中从邮政编码中删除 4 我有这样的数据 85001 52804 3233 Winston Salem 我希望它成为 85001 52804 Winston Salem gt gt gt zip 52804 3233 gt
  • 为什么与 SqlCommand 一起使用时某些 sql 查询会慢很多?

    我有一个存储过程 它从 Sql Server Management Studio 执行的速度比使用以下命令运行时快得多 2 秒 System Data SqlClient SqlCommand 2 分钟后超时 这可能是什么原因 细节 在 S