我有一个包含8列的表,但是对于某个功能,我只需要表中的4个列值。所以我目前只选择4列并将其映射到我的实体并返回它。当我映射时,我相信在检索到的值上有一个循环运行。那么最佳做法是什么?我应该从数据库中检索所有8个值还是仅获取我需要的值并将其映射到实体并返回它?
var users= (from u in context.Users
join r in base.DatabaseContext.Users
where s.userId== id
select new {
Id=u.Id,
FirstName=u.FirstName,
LastName =u.LastName,
IsActive=u.IsActive,
}).GroupBy(x => x.Id).Select(y => y.FirstOrDefault()).AsEnumerable()
.Select(x => new WebCore.Model.User // Here i believe there will be an iteration on the retrieved result
{
Id = x.Id,
FirstName = x.FirstName,
LastName = x.LastName,
IsActive = x.IsActive,
}).AsQueryable();
return users;
我的理解是IO操作会导致主要的性能问题。但在这种情况下我有点困惑。如果可能,请为我提供详细说明,以便清楚地了解问题。
答案 0 :(得分:2)
根据经验,您应该只查询应用程序中需要的字段。查询比所需更多的字段将导致从这些数据库读取这些字段并通过网络传输数据的开销。因此,在您的情况下,您应该只查询4列,因为这就是您现在所需要的。
关于您对LINQ查询的担忧,这些查询通常相对有效,我强烈建议不要过早优化,直到它成为瓶颈。请参阅Donald Knuth关于此主题的意见。