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;
                }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM