优化的地方:

  原地址:https://www.cnblogs.com/yaopengfei/p/9226328.html

  ①:如果仅是查询数据,并不对数据进行增、删、改操作,查询数据的时候可以取消状态追踪。

     db.TestInfor.AsNoTracking().FirstOrDefault();

  ②:用什么查什么,比如一张表有100多个字段,本次业务只需要5个字段,一定是select这5个字段,然后toList,而不是全部查询,再toList()。

  ③:利用EF调用原生SQL语句或者EF调用存储过程执行。

EF数据查询效率对比:

  原地址:https://www.cnblogs.com/zhaopei/p/5721789.html

1、实质:没有连表

                var scores = db.Scores.Take(5).ToList();
foreach (var item in scores)
{
var name = item.Student.Name;//每次循环 都会产生一条sql
}

2、实质:连了表Student。
  使用Include需要引用命名空间 using System.Data.Entity;

  缺陷:连表时,会把子表的字段全部查询出来

          var scores = db.Scores.Take(5).Include(c => c.Student).ToList();
foreach (var item in scores)
{
var name = item.Student.Name;
}
          使用 .Include(c => c.Student) 需要引用 System.Data.Entity;

3、减少了 内存存储空间 和 应用程序与数据库的数据传输带宽。
  实质:SQL查询的字段变少了
  缺陷:一个字段一个字段的手动映射

          var scores = db.Scores
.Take(5)
.Include(c => c.Student)
.Select(c => new { c.ChineseFraction, c.CreateTime, StudentName = c.Student.Name })
.ToList();
foreach (var item in scores)
{
var name = item.StudentName;
}

4、避免在循环中访问导航属性多次执行sql语句。
   避免了查询语句中太多的手动映射,影响代码的阅读。

          Mapper.Initialize(x => x.CreateMap<Score, ScoresDto>());//CreateMap应该是要写到Global.asax文件里面的
var scores = db.Scores
.Take()
.ProjectTo<ScoresDto>()//需引用:using AutoMapper.QueryableExtensions;
.ToList();
foreach (var item in scores)
{
var name = item.Student.Name;
}

EF 数据查询效率对比的更多相关文章

  1. WFS: postgresql(postgis)和shp文件查询效率对比

    对GeoServer上的WFS的各种数据源查询效率感兴趣,做个测试.本次测试了Postgresql.geopackage.shp文件三种数据源的查询效率,无论是本机还是服务器环境,pg存储查询效率都比 ...

  2. sqlserver 数据查询效率优化

    首先优化是具体情况具体分析,从硬件.改进表结构.索引.改进sql查询语句.存储方式都有关系等多方面入手 比如单表数据量(100w-200w条)不大的情况下,查询效率慢 可以从优化sql语句.对多个排序 ...

  3. EF – 3.EF数据查询基础(下)数据关联

    5.5.1 <关于“数据关联”,你不一定清楚的事> 这讲视频比较全面地介绍了“一对一”.“一对多”和“多对多”三种数据关联类型在关系数据库和Entity Framework数据模型中的实现 ...

  4. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  5. 关于vector push_back()与其他方式读取数据的效率对比

    引言: 在读取大量数据(数组)时,使用vector会尽量保证不会炸空间(MLE),但是相比于scanf的读取方式会慢上不少.但到底效率相差有多大,我们将通过对比测试得到结果. 测试数据:利用srand ...

  6. EF – 2.EF数据查询基础(上)查询数据的实用编程技巧

    目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...

  7. 关于vector push_back()与其他方式读取数据的效率对比(转)

    引言: 在读取大量数据(数组)时,使用vector会尽量保证不会炸空间(MLE),但是相比于scanf的读取方式会慢上不少.但到底效率相差有多大,我们将通过对比测试得到结果. 测试数据:利用srand ...

  8. Hibernate查询效率对比

    查询已知表名的实体时推荐使用getHibernateTemplate().executeWithNativeSession() + SQLQuery方式. 以下测试使用JUnit进行,仅查询一次,查询 ...

  9. Java使用JDBC连接数据库逐条插入数据、批量插入数据、以及通过SQL语句批量导入数据的效率对比

    测试用的示例java代码: package com.zifeiy.test.normal; import java.io.File; import java.io.FileOutputStream; ...

随机推荐

  1. CSS的4种定位方式比较

    CSS有四种定位(Positioning)方法:Static,Relative, Absolute和Fixed 元素flow, overlap 相对参照物: 能否用offset( top, left, ...

  2. WebView长按保存图片;WebView不跳转到系统的浏览器;WebView加载显示进度条;WebView返回事件处理;

    直接看代码即可,代码里面注释写的很清楚,这个类拉下来就能用: 写法和命名比较粗暴,但也简单易懂: public class MainActivity extends AppCompatActivity ...

  3. Android忘记锁屏密码如何进入手机?

    Android忘记锁屏密码如何进入手机?     1.关闭手机 2.进入recovery模式(即恢复模式,记住不是挖煤模式.进入恢复模式不同手机有不同方法,三星的话安主页键,关机键和音量+(或-键), ...

  4. WPF DataGrid多表头/列头,多行头,合并单元格,一列占据多行

    先上效果图: 思路说明:这是两个DataGrid,没有嵌套,位置和高度保持一致,在加上ScrollViewer滚动条,这就像是在一个DataGrid中. 缺点: 因为最外层有透明的Border,所以没 ...

  5. 网易云音乐mp3外链、真实地址下载方法

    一个网易音乐外链地址长期有效,很简单的方法: 第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是: http://music.163.com/#/song?id= ...

  6. LeetCode 771 宝石和石头

    Input: J = "aA", S = "aAAbbbb" Output: 3 解:J为宝石字符串,S为包含宝石的字符串,J中的字母如果在S中出现数字就➕1 ...

  7. 如何安装Exchange2010上安装更新汇总(Update Rollup)

    原文链接:http://blog.51cto.com/zhengyu213/516729 更新汇总安装方式: 1. Windows update 通过自动更新服务安装Exchange更新汇总补丁.但E ...

  8. OpenGL中摄像机矩阵的计算原理

    熟悉OpenGL|ES的朋友,可能会经常设置摄像机的view矩阵,iOS中相对较好,已经封装了方向,只需要设置摄像机位置,目标点位置以及UP向量即可.下面先介绍下摄像机view矩阵的计算原理.此处假设 ...

  9. php多图片上传。

    1. <form method="post" enctype="multipart/form-data" action='请求地址' > <i ...

  10. new date() 计算本周周一日期

    new date() 计算本周周一日期 需求:计算某天的那一周周一的日期 1.new Date() date.getDay(); //获取周几 0-6 date.getTime();//获取时间戳 1 ...