代码与 SSMS 中的查询性能差异
在 SQL Server Management Studio (SSMS) 中顺利执行的查询在以下情况下可能会表现得过慢:在代码内执行。最近的代码开发过程中遇到了这种差异,促使我们调查根本原因。
代码实现
用于运行查询的 C# 代码如下:
using (var conn = new SqlConnection("Data Source=backend.example.com;...")) { using (var ada = new SqlDataAdapter(sqlCommand, conn)) { ada.SelectCommand.Parameters.AddWithValue("@clientID", ClientID); ada.SelectCommand.Parameters.AddWithValue("@dt", dtpFilter.Value); conn.Open(); Logs.Clear(); ada.Fill(Logs); // Time out exception for 30 sec limit. } }
SSMS查询
从 C# 代码中提取的相同查询直接在 SSMS 中运行:
SELECT [PK_JOB],[CLIENT_ID],[STATUS],[LOG_NAME],dt FROM [ES_HISTORY] inner join [es_history_dt] on [PK_JOB] = [es_historyid] Where client_id = @clientID and dt > @dt and (job_type > 4 or job_type = 0 or job_type = 1 or job_type = 4 ) Order by dt desc
分析
经检查,两个查询之间存在细微差别。在 SSMS 版本中,@clientID 参数被声明为 VARCHAR,而在 C# 代码中,它是使用 AddWithValue 方法添加的,该方法通常根据 .NET 变量的类型分配数据类型。在本例中,ClientID 变量是字符串类型,在 SQL Server 中映射为 NVARCHAR。
影响
这种差异对查询性能有显着影响。 NVARCHAR 参数类型不允许搜索参数 (SARG) 过滤,这是 SQL Server 用于根据索引列快速定位行的关键优化技术。结果,C#代码中的查询被迫执行表扫描,效率远低于索引查找。
解决方案
解决差异,需要在 C# 代码中显式指定 @clientID 参数的 VARCHAR 数据类型。这可以使用以下语法来实现:
ada.SelectCommand.Parameters.Add("@clientID", SqlDbType.VarChar, 200).Value = ClientID;
通过确保参数的数据类型与 SSMS 查询中声明的数据类型匹配,应用程序可以避免性能损失并立即执行查询 -高效的方式。
以上是为什么 My SQL Server 查询在 SSMS 中很快,但在 C# 代码中却很慢?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),