C# Linq到SQL('select*from table').Count()与(“select column from table”).Count()的比较

C# Linq到SQL('select*from table').Count()与(“select column from table”).Count()的比较,c#,sql,performance,linq,linq-to-sql,C#,Sql,Performance,Linq,Linq To Sql,我在写一些linq查询时遇到了以下场景: 我想使用基于某些过滤器的Linq从数据库中获取记录 在这里,我想把所有的记录计数也,所以我喜欢下面 var queryData = pageContext.ExecuteQuery<MYVIEW>("select * from MYVIEW where {condition} "+ (!String.IsNullOrEmpty(query) ? " and " + query : "") + (!String.IsNullOrEmpt

我在写一些linq查询时遇到了以下场景:

我想使用基于某些过滤器的Linq从数据库中获取记录

在这里,我想把所有的记录计数也,所以我喜欢下面

    var queryData = pageContext.ExecuteQuery<MYVIEW>("select * from MYVIEW where {condition} "+ (!String.IsNullOrEmpty(query) ? " and " + query : "") + (!String.IsNullOrEmpty(sortString) ? "order by  " + sortString : ""));
            recordCount = queryData.Count();
            result = queryData.Skip(skip)
                    .Take((resultsPerPage).AsQueryable()
                    .ToList();
在这里,我只是想知道,从表中选择*与从表中选择ID相比,在性能上有什么不同吗


我希望同时获取数据和记录计数

,以防您只需要我推荐的记录计数 从表中选择计数1 对于记录计数,它只返回一个数字

从表中选择* 将返回所有列,即使SQL引擎执行查询不需要更多时间也不需要此数据 通过网络消耗更多的带宽

从表中选择Id 将仅返回Id列,这意味着SQL引擎执行查询的时间更短
由于您不读取所有数据,因此通过网络消耗的带宽更少,分页逻辑无法计算检索到的列表。 所以你所拥有的看起来还不错

唯一的问题是计数应该在读取之前还是之后

我会测试两者。我希望在场景a页面是所有项目的情况下,DB可以更容易地在读取后传递计数。该页很可能仍在db缓冲服务器内存中 它可以很容易地返回计数


对于预期的数据量,目标数据库上有经验的DBA是最好的人选。

如何解决需要数据和行计数的情况。。。比如说,分配一个足够大的数据结构来保存结果?
    totalRecords = pageContext.ExecuteQuery<View_ManagerExpenseReportSearchList>(selectQuery).Count();

    result = pageContext.ExecuteQuery<View_ManagerExpenseReportSearchList>(selectQuery).Skip(skip)
                        .Take(resultsPerPage).AsQueryable()
                        .ToList();