Problemy z fragmentacją SQL Server

Mam kilka tabel (User i UserRecord) w mojej bazie danych, które są bardzo rozdrobnione (np. 99%) i powodują zatrzymanie całej bazy danych, a zatem i strony internetowej.

UserRecord jest jakby migawką tego użytkownika w danym momencie. Użytkownik jest jak rekord główny dla tego użytkownika. Użytkownik ma 0 do wielu rekordów użytkownika. Użytkownik ma około miliona wierszy, UserRecord ma około 2,5 miliona. Te tabele są często zapisywane. Często też są przeszukiwani. Obie będą znacznie większe. Główne indeksy, które są mocno pofragmentowane, to klucze główne tabel User i UserRecord.

DB to SQL Server 2012 i używam Entity Framework i nie używam żadnych procedur przechowywanych.

Tabele wyglądają mniej więcej tak:

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

(nie jestem pewien, czy lista jest ważna, czy nie, ale pomyślałem, że uwzględnię ją jako powiązaną z User_Record. Lista ma 0 do wielu UserRecords)

Ustawiliśmy plan konserwacji SQL, aby codziennie odbudowywać indeksy, co pomaga, ale czasami nie wystarcza.

Przyjaciel zasugerował, że używamy dwóch baz danych, jednej do czytania, drugiej do pisania i synchronizujemy odczytaną DB z zapisanej bazy danych. Nie wiem nic o tym, ale pierwszym problemem, który widzę w tym rozwiązaniu, jest to, że potrzebujemy aktualnych danych podczas przeglądania strony. Na przykład jeśli zaktualizujemy dane użytkownika lub rejestr użytkownika, chcemy od razu zobaczyć te zmiany.

Czy ktoś ma jakieś sugestie, w jaki sposób mogę rozwiązać ten problem, zanim wymknie się spod kontroli?

questionAnswers(1)

yourAnswerToTheQuestion