我的数据库中有几个表(用户和用户记录)变得非常分散(如 99%)并导致整个数据库以及因此网站停止运行。
UserRecord 有点像该用户在某个时间点的快照。用户就像该用户的主记录。用户有 0 到多个 UserRecords。User 有大约 100 万行,UserRecord 有大约 250 万行。这些表被写入很多。他们也被大量搜索。他们都会变得更大。严重碎片化的主要索引是 User 和 UserRecord 表的主键。
数据库是 SQL Server 2012,我使用的是实体框架,我没有使用任何存储过程。
表看起来像这样:
USER
UserName string PK ClusteredIndex
FirstName string
LastName string
+SeveralMoreRows
USER_RECORD
UserRecordId int PK ClusteredIndex
ListId int FK(List)
UserName string FK(User) NonClusteredIndex
Community string NonClusteredIndex
DateCreated datetime
+LotsMoreRows
LIST
ListId int PK & ClusteredIndex
Name string
DateCreated datetime
(不确定 List 这是否重要,但我认为我会包括它,因为它与 User_Record 相关。List 有 0 到许多 UserRecords)
我们设置了一个 SQL 维护计划来每天重建索引,这确实有帮助,但有时还不够。
一位朋友建议我们使用两个数据库,一个用于读取,一个用于写入,我们将读取 DB 与写入 DB 同步。并不是说我对此一无所知,但我看到这个解决方案的第一个问题是我们在查看网站时需要最新数据。例如,如果我们更新用户详细信息或用户记录,我们希望立即看到这些更改。
有没有人对我如何在它失控之前解决这个问题有任何建议?