Entity Framework性能优化
AsNonUnicode
执行如下语句,并用SqlProfiler监控其SQL:
var list = WMFactory.ReChargeMobile.Queryable().Where(w => w.InterfaceId == guid && w.MsgId == "xxx")
.Select(s => new
{
AgentId = s.AgentId,
PackageName = s.PackageName
})
.ToList();
生成SQL如下:
SELECT 1 AS [C1],
[Extent1].[AgentId] AS [AgentId],
[Extent1].[PackageName] AS [PackageName]
FROM [dbo].[FL_ReChargeMobile] AS [Extent1]
WHERE ([Extent1].[InterfaceId] = 'f97317a1-21e1-4a6e-b1f9-960fc1def7eb' /* @p__linq__0 */)
AND (N'xxx' = [Extent1].[MsgId])
下面将语句换成如下:
var list = WMFactory.ReChargeMobile.Queryable().Where(w => w.InterfaceId == guid && w.MsgId == EntityFunctions.AsNonUnicode("xxx"))
.Select(s => new
{
AgentId = s.AgentId,
PackageName = s.PackageName
})
.ToList();
生成SQL如下:
SELECT 1 AS [C1],
[Extent1].[AgentId] AS [AgentId],
[Extent1].[PackageName] AS [PackageName]
FROM [dbo].[FL_ReChargeMobile] AS [Extent1]
WHERE ([Extent1].[InterfaceId] = '610a6980-7f90-4f48-83d1-def8ef3db13e' /* @p__linq__0 */)
AND ('xxx' = [Extent1].[MsgId])
相信你也看出其中生成的SQL语句区别了,一个加了N,一个未加N,都知道N是将字符串作为Unicode格式进行存储。因为.Net字符串是Unicode格式,在SQL中Where子句中当一侧有N型而另一侧没有N型时,此时会进行数据转换,也就是说如果你在表中建立了索引此时会失效代替的是造成全表扫描。用 EntityFunctions.AsNonUnicode 方法来告诉.Net 将其作为一个非Unicode来对待,此时生成的SQL语句两侧都没有N型,就不会进行更多的数据转换,也就是说不会造成更多的全表扫描。所以当有大量数据时如果不进行转换会造成意想不到的结果,因此在进行字符串查找或者比较时建议用AsNonUnicode()方法来提高查询性能。
Entity Framework性能优化的更多相关文章
- 浅析Entity FrameWork性能优化
浅析EF性能优化 1. 数据Load 延迟加载:当实体第一次读取时,相关数据没有加载:当第一次试图访问导航属性时,所需的导航数据自动加载,EF默认使用这种方式加载数据,尽量使用预先加载和显 ...
- [转载] - Entity Framework 性能优化建议
1.对象管理机制-复杂为更好的管理模型对象,EF提供了一套内部管理机制和跟踪对象的状态,保存对象一致性,使用方便,但是性能有所降低. 2.执行机制-高度封装在EF中,所有的查询表达式都会经过语法分析. ...
- 浅谈.NET Micro Framework性能优化 转自 软件中国
.NET Micro Framework的可剪裁性,高定执行,和天生对硬件高集成度都让它的前途一片光明.当然,它现在还很年轻,就发布的SDK v3.0来看,它还有很长的路要走. 废话不说,就这几个月我 ...
- 提高entity framework 性能,要注意哪些事情.
转自:http://www.cnblogs.com/jake1/archive/2013/04/25/3043664.html 我发现现在有不少博友,都反对使用EF框架,说它性能低.其实只要你用的好, ...
- Entity Framework性能影响因素分析
1.对象管理机制-复杂为更好的管理模型对象,EF提供了一套内部管理机制和跟踪对象的状态,保存对象一致性,使用方便,但是性能有所降低. 2.执行机制-高度封装在EF中,所有的查询表达式都会经过语法分析. ...
- Code First Entity Framework 6化被动为主动之explicit loading模式实战分析( 附源码)
在使用Entity Framework加载关联实体时,可以有三种方式: 1.懒加载(lazy Loading); 2.贪婪加载(eager loading); 3.显示加载(explicit load ...
- LINQ TO SQL和Entity Framework 的关系 你了解多少?
1. LINQ TO SQL 和EF 特点: LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist ...
- Entity Framework 项目使用心得
在博客园很久了,一直只看不说,这是发布本人的第一个博客. 总结一下在项目中,EntityFramework使用的一下经验拿来和大家分享,希望对大家有用~ 1. 在Entity Fram ...
- APS.NET MVC + EF (02)---深入理解ADO.NET Entity Framework
2.7 深入理解Entity Framework 性能问题几乎是一切ORM框架的通病,对于EF来说,引起性能低的原因主要在以下几个方面. 复杂的对象管理机制为了在.NET中更好地管理模型对象,EF提供 ...
随机推荐
- jni.h头文件详解一
1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...
- WordPress MORE+主题‘prettyPhoto’跨站脚本漏洞
漏洞名称: WordPress MORE+主题‘prettyPhoto’跨站脚本漏洞 CNNVD编号: CNNVD-201310-284 发布时间: 2013-10-23 更新时间: 2013-10- ...
- Android4.0 -- UI控件之 Menu 菜单的的使用(三)
上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...
- 常用的Git命令
我的常用的Git命令 Git仓库配置常用 1. clone 克隆一份远程的Git版本库 git clone git://github.com/someone/some_project.git some ...
- 基于TCP协议的客户端
基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; im ...
- 【转】Mac OS X 中 Zsh 下 PATH 环境变量的正确设置
在 Mac OS X 中使用 zsh,环境变量 PATH 一不小心就会变得很紊乱,表现为自己设置的路径总是被放到系统路径之后,部分路径还会有重复.这是我们不太了解 zsh 启动时加载文件的顺序和 Ma ...
- Y2K Accounting Bug
题目: Description Accounting for Computer Machinists (ACM) has sufferred from the Y2K bug and lost som ...
- Gof-23种设计模式名称列表
工欲善其事,必先利其器. 在真正使用设计模式之前,必须知道各个设计模式对应的场景.设计模式是针对某种固定的场景下产生的固定解决方案.只有明确的场景,才会有明确的设计方式和方法. 设计模式全集: Abs ...
- Android 获取WIFI MAC地址的方法
1. 经常用法,调用Android的API:WifiManager <uses-permission android:name="android.permission.ACCESS_W ...
- Linux进程管理—信号、定时器
信号: 1. 信号的作用: 背景: 进程之间通信比较麻烦. 但进程之间又必须通信,比如父子进程之间. 作用: 通知其他进程响应.进程之间的一种通信机制. 信号: 接受信号的进程马上停止,调 ...