日期:2014-05-20  浏览次数:20818 次

关于LinQ分页效率问题
分页查第90-100条中的10条
Linq代码如下:
C# code
var movies = (from m in db.Movies
                          where m.ReleaseDate > new DateTime(1904, 6, 1)
                          orderby m.ID
                          select m).Skip(90).Take(10);
            return View(movies.ToList());


我跟踪Linq的SQL语句是
SQL code

--LinQ SQL
SELECT TOP 10  A.*
FROM    ( SELECT
                    * ,
                    ROW_NUMBER() OVER ( ORDER BY sd_Key ASC ) ROWS
          FROM      dbo.sys_Dictionary
        ) A
WHERE   A.ROWS > 90



而我们以前用ADO.Net调用SQL语句查询的SQL语句是
SQL code

--ADO.Net手动传入的SQL
SELECT  A.*
FROM    ( SELECT TOP 100
                    * ,
                    ROW_NUMBER() OVER ( ORDER BY sd_Key ASC ) ROWS
          FROM      dbo.sys_Dictionary
        ) A
WHERE   A.ROWS > 90



很明显当表中记录很大时,后面的sql语句比linq的sql语句效率高
刚用linq,不知道我理解的对不对,请指教。

------解决方案--------------------
你的表能有多大?
------解决方案--------------------
Linq的方式是否可理解为 数据先取出来,缓存?
------解决方案--------------------

写个循环插个百万条测式数据。。

把两个sql语句放进去。。

看看到底哪个快些。。。

linq比sql慢点其实可以理解。。。


------解决方案--------------------
linq 生成的效率高点吧。 没测试过
------解决方案--------------------
探讨
分页查第90-100条中的10条
Linq代码如下:
C# code
var movies = (from m in db.Movies
where m.ReleaseDate > new DateTime(1904, 6, 1)
orderby m.ID
……

------解决方案--------------------
SQL code
--ADO.Net手动传入的SQL
SELECT  A.*
FROM    ( SELECT TOP 100
                    * ,
                    ROW_NUMBER() OVER ( ORDER BY sd_Key ASC ) ROWS
          FROM      dbo.sys_Dictionary
        ) A
WHERE   A.ROWS > 90