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, IncidentKeyktó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 IncidentKeyrekordach, 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.