Przedmówię więc, mówiąc, że nie mam całkowitej kontroli nad moim projektem db, więc wielu aspektów obecnego systemu nie można zmienić na potrzeby tego scenariusza.
Komentarze na temat tego, w jaki sposób powinniśmy przemyśleć aspekty projektu, są prawdopodobnie poprawne, ale nie są pomocne :)
Mam bardzo duży stół o szerokości około 150 pól i rzędach około 600 m, który napędza dużą liczbę procesów. Jest to sytuacja w hurtowni danych, więc nie mamy ŻADNYCH aktualizacji / wstawek poza zaplanowanym procesem ładowania, więc jest mocno indeksowana.
Podjęto decyzję, aby spróbować podzielić ten stół na partycje i mam pewne obawy dotyczące indeksowania podzielonej na partycje tabeli. Nie mam żadnego doświadczenia z partycjonowaniem, więc każde wejście lub linki są mile widziane. Nie mogłem znaleźć konkretnie tego, czego szukam na BOL lub msdn.
Obecnie skupiamy się na polu, który nazwiemy, IncidentKey
który jest varchar(50)
i nie jest unikalny - moglibyśmy mieć od 1 do 100 rekordów z tym samym IK
(proszę nie komentować). Często otrzymujemy nowe dane na starych IncidentKey
rekordach, więc nie są one również sekwencyjne.
Rozumiem, że muszę dołączyć moje pole partycji IncidentDate
, do mojego klastrowego klucza indeksu, aby partycja działała poprawnie. Myślę, że tak będzie IncidentKey, IncidentDate
.
Pytanie brzmi: w jaki sposób mechanika indeksu klastrowego będzie działać na kluczu 2-częściowym w tabeli partycjonowanej, jeśli rekord na „nowej” partycji powinien znajdować się przed rekordem na „starej” partycji w indeksie klastrowym?
Na przykład mam 5 rekordów:
IncidentKey Date
ABC123 1/1/2010
ABC123 7/1/2010
ABC123 1/1/2011
XYZ999 1/1/2010
XYZ999 7/1/2010
Jeśli otrzymam nowy rekord ABC123, 2/1/2011
, będzie on musiał znajdować się w indeksie klastrowym PRZED XYZ999, 1/1/2010
. Jak to działa?
Zakładam fragmentację i wskaźniki, ale nie mogę znaleźć żadnych informacji na temat fizycznej pamięci masowej i konfiguracji indeksów klastrowanych niepartycjonowanych w tabelach partycjonowanych z kluczami dwuczęściowymi.