我在我的数据库中有几个表(User & UserRecord),这些表得到极其分散的状态(如99%),并导致整个数据库因此导致网站崩溃。SQL Server碎片问题
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读取的数据库。并不是说我知道做这件事的任何事情,但我看到这个解决方案时遇到的第一个问题是我们在查看网站时需要最新的数据。例如,如果我们更新用户详细信息或UserRecord,我们希望立即看到这些更改。
有没有人有任何建议,我可以解决这个问题之前,它螺旋失控?
什么是表格定义?你使用GUID作为主键吗? –
你是否是唯一标识符列上的聚集索引?这往往会在一些插入后导致碎片...因为这些值是随机的... – PrfctByDsgn
我在问题中添加了一些更多的细节 – Owen