Entity Framework查询生成大量的子查询,如何避免?求救

最近使用Entity Framework做一个中型的项目,一张表含有千万条数据,并没有使用很复杂的查询,只是程序上使用了DTO进行帅选数据,且使用了分页,效果很不理想。经过跟踪sql,我发现很多简单的查询,都存在子查询,而子查询往往会影响到查询性能,在这里,我想问问大虾,除了自己写SQL语句,有没有更好的解决办法在Entity Framework基础上处理这个问题?

如图所示:

Entity Framework查询代码

        private async Task<QuotationDto[]> GetEntitys(int pageIndex, int pageSize)
        {
            var entitys = await Db.Quotations.Where(x => x.IsDelete == false && x.IsPass).OrderByDescending(x => x.CreatedDateTime).Select(x => new QuotationDto
            {
                ProductName = x.Name,
                Id = x.Id,
                Price = x.YouPrice,
                UserName = x.UserName,
                Address = x.ProvinceText
                + x.CityText
                + x.CountyText
                + x.TownText
                + x.VillageText,
                RangeTime = EntityFunctions.DiffSeconds(x.CreatedDateTime, DateTime.Now)
            }).Skip(pageIndex * pageSize).Take(pageSize).ToArrayAsync();
            return entitys;
        }

生成的SQL语句

时间: 2024-10-09 17:28:42

Entity Framework查询生成大量的子查询,如何避免?求救的相关文章

Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL代码. 但是,EF 连接MYSQL 之后,部分代码没法查询EF生成的SQL 代码,如下代码: db.BaseDept.Remove(basedept)的时候, db.BaseDept打断点,查询到的是select 语句, Remove之后,就变成执行结果了,具体生成的DELETE 的SQL 代码无法查看.

Entity Framework多表多条件动态查询

方式一  Linq To Entity形式: /// <summary> /// 查询的数据 /// </summary> /// <param name="order">升序asc(默认)还是降序desc</param> /// <param name="sort">排序字段</param> /// <param name="search">查询条件</p

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

1.子查询知识体系,单行子查询,多行子查询

 1查询工资比scott高的员工信息 A 第一步:查询出scott这个员工的工资 select sal from emp where ename = 'SCOTT'; B 第二步:查询出工资比scott高的员工信息 select * fromemp where sal >3000; 总结: 子查询的本质:多个select语句的嵌套 2:子查询的知识体系搭建 A 合理的书写风格 B 子查询外面()不要忘记 C 子查询和主查询可以查询的是同一张表,也可以不是同一张表 只要子查询返回的结果,主查询

[Z]T-SQL查询进阶--深入理解子查询

原文链接: http://www.cnblogs.com/CareySon/archive/2011/07/18/2109406.html 引言 SQL有着非常强大且灵活的查询方式,而多表连接操作往往也可以用子查询进行替代,本篇文章将会讲述子查询的方方面面. 简介 子查询本质上是嵌套进其他SELECT,UPDATE,INSERT,DELETE语句的一个被限制的SELECT语句,在子查询中,只有下面几个子句可以使用 SELECT子句(必须) FROM子句(必选) WHERE子句(可选) GROUP

Entity Framework with MySQL 学习笔记一(查询)

参考 : http://msdn.microsoft.com/en-us/data/jj574232.aspx EF 查询基本上有3中 默认是 Lazy Loading 特色是只有在需要数据的时候EF才会像数据库请求,它不会使用任何inner join 比如我们有一个产品,有很多颜色,(1对多) 那么我们想把每个产品和颜色统统选出来 using (EFDB db = new EFDB()) { var prods = db.prods.ToList(); //像数据库请求prods, 但是不会包

SQL疑难杂症【4 】大量数据查询的时候避免子查询

前几天发现系统变得很慢,在Profiler里面发现有的SQL执行了几十秒才返回结果,当时的SQL如下: 可以看得出来,在652行用了子查询,恰巧目标表(QS_WIP)中的记录数为100000000+,通过如下SQL可以得到: SELECT ROWS FROM SYSINDEXES WHERE ID=OBJECT_ID('QS_WIP') AND INDID <2 大量的数据导致子查询的效率非常慢,应用系统一度提示"time out",经过优化,改为如下写法,执行效率明显提升: 先

Oracle-28-子查询之多行子查询&amp;子查询之多列子查询

一.子查询的基本类型之多行子查询 (1)使用IN操作符进行多行子查询.(总结:IN操作符后可用多行子查询) 比如:查询各个职位中工资最高的员工信息. SQL>select ename, job, sal from emp where salin (select max(sal) from emp group by job);--单列子查询 或 SQL>select ename, job, sal from emp where (sal,job)in (select max(sal), job

三表查询、用到子查询,

SELECT d.*,COUNT(c.id) cCount FROM (SELECT a.*,COUNT(b.id) bCount FROM guang a LEFT JOIN guang2 b ON a.id = b.pid GROUP BY a.id ) AS d LEFT JOIN guang3 c ON d.id = c.fid GROUP BY d.id ORDER BY d.bCount DESC,cCount DESC 子查询就是把子sql语句查询出来当做一张表,再与另外的表关联查