zoukankan      html  css  js  c++  java
  • EF 数据查询效率对比

    优化的地方:

      原地址: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(5)
                        .ProjectTo<ScoresDto>()//需引用:using AutoMapper.QueryableExtensions;
                        .ToList();
                    foreach (var item in scores)
                    {
                        var name = item.Student.Name;
                    }
  • 相关阅读:
    navigator 对象
    面向对象 ( OO ) 的程序设计——继承
    面向对象 ( OO ) 的程序设计——创建对象
    面向对象 ( OO ) 的程序设计——理解对象
    芯片知识扫盲
    8位、16位、32位单片机中的“XX位”指什么?
    stm32库函数建工程和使用Keil自带库建工程有没有区别?发现了同样的程序在两种情况下keil自带库可以运行的情况,不知是什么原因
    关于输出的看法
    4-鸡肉为何如此受欢迎
    7-发音规则(弱读,缩写,其他)
  • 原文地址:https://www.cnblogs.com/guxingy/p/9306236.html
Copyright © 2011-2022 走看看