我的数据库中有几个表(User& UserRecord),它们非常分散(如99%)并导致整个数据库,因此网站停止运行.
UserRecord有点像某个时间点的用户快照.用户就像该用户的主记录.用户有0到多个UserRecords.用户有大约一百万行,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
(不确定列表是否重要但是我认为我将其包含在与User_Record相关的位置.列表包含0到多个UserRecords)
我们设置了一个sql维护计划来每天重建索引,这对我们有帮助,但有时还不够.
一位朋友建议我们使用两个数据库,一个用于读取,一个用于写入,我们从写入DB同步读取DB.并不是说我对此有所了解,但我在解决这个问题时遇到的第一个问题是我们在查看网站时需要最新的数据.例如,如果我们更新用户详细信息或UserRecord,我们希望立即看到这些更改.
有没有人有任何关于我如何能够在失控之前解决这个问题的建议?