c# - WHERE 子句中的 EF 硬编码值很快,字符串参数很慢
问题描述
当我在我的 EF Where 子句中设置一个字符串变量时,我遇到了一个非常慢的性能,当我在 where 子句中硬编码字符串值时,我遇到了非常快的性能。
C#、.Net 框架 4.7.1、EF 6.2
50毫秒
db.Dealers.Where(x => x.SourceDealerId == "000111222fff333q");
1.5秒
var parameter = "000111222fff333q";
db.Dealers.Where(x => x.SourceDealerId== parameter );
DealerId 在数据库中属于 Char(18) 类型,并且可以为空。方法是数据库优先。以下是经销商列的属性:
两种情况下生成的 SQL 有所不同。对于快速案例:...WHERE dealerId = '000111222fff333q'
对于慢速情况:
解决方案
这可能与实体框架中的 NULL 比较设置有关
在您的查询之前添加以下代码,看看它是否有助于您的查询性能:
context.ContextOptions.UseCSharpNullComparisonBehavior = false;
推荐阅读
- java - Java中的自动类型提升
- python - 拆分嵌套的numpy数组
- date - 如何在 Mirth 中将本地日期转换为 UTC?
- php - Laravel如何禁用HTTP身份验证标头的使用
- sql - 在 SQL Server 2012 和 SQL Server 2016 中使用全文索引搜索检索的数据的差异
- gmail - gmail说用户超过配额,尽管用户有很多空间
- rule-engine - 创建规则引擎 Drools 时出错
- c++ - 如何将训练数据从 UCI 加载到 OpenCV?
- java - Java 进程 - 等待进程退出
- ember.js - 当用户取消编辑操作时,ember 回滚属性