我的用户在数据库中的表格变得越来越大(按列而不是行),结果是减慢了我的网站的各个区域。这是因为它会在每次对它进行连接时尝试从用户表中获取每一列。拆分表以提高性能
我想我会保留用户表中的所有常用字段,然后将其他字段放在单独的表中。例如,假设我有我的数据库中下表:
Users:
- UserID (PK, Identity)
- UserName
- Password
...
UsersActivity:
- UserID (PK, FK)
- LastActivityDate
- LastLoginDate
...
UsersPreferences:
- UserID (PK, FK)
- HtmlEmail
- HideEmail
...
用下面的实体:
public class User {
public virtual int UserID { get; set; }
public virtual string UserName { get; set; }
public virtual string Password { get; set; }
public virtual UserActivity Activity { get; set; }
public virtual UserPreferences Preferences { get; set; }
}
public class UserActivity {
public virtual User User { get; set; }
public virtual DateTime LastActivityDate { get; set; }
public virtual DateTime LastLoginDate { get; set; }
}
public class UserPreferences {
public virtual User User { get; set; }
public virtual bool HtmlEmail { get; set; }
public virtual bool HideEmail { get; set; }
}
我只是想知道什么是映射这个以获得最佳性能的最佳方式是什么?我想我可以在用户实体的活动和性能属性上进行一对一的映射。不过,据我了解,一对一映射不支持延迟加载,并且这种方法最终会变慢。
我还查看了组件映射,并不太确定我是否可以将其映射到单独的表(请更正我,如果最好将它保留在同一个表中)以及组件是否支持延迟加载。
在我开始对应用程序进行一些大量的重构之前,我想我会得到某个可能已经这样做的人的意见。真的很感谢帮助。
感谢
编辑:我发现,你可以延迟加载一比一的关系,只要它需要/约束。这是我的情况。所以我说干就干,在下面的文章中进行了说明:
http://brunoreis.com/tech/fluent-nhibernate-hasone-how-implement-one-to-one-relationship/
现在的问题是,我得到的错误:
NHibernate.Id.IdentifierGenerationException:NHibernate.Id.IdentifierGenerationException:空id为UserActivity生成。
我已经发布了一个后续问题,这是更具体的映射一对一的关系,你可以在这里找到http://stackoverflow.com/questions/4660160/map-one-to-one-relationship -doesnt-允许-插入。我会在不久的将来用我的发现更新这个问题。 – nfplee 2011-01-11 16:52:41