Тож дозвольте мені передмовити, сказавши, що я не маю тотального контролю над моїм дизайном db, тому для цілей цього сценарію не можна змінити багато аспектів поточної системи .
Коментарі про те, як ми повинні переосмислити аспекти дизайну, ймовірно, правильні, але непотрібні :)
У мене дуже велика таблиця, приблизно 150 полів завширшки і близько 600 м рядків, яка керує великою кількістю процесів. Це в ситуації зі сховищем даних, тому у нас немає будь-яких оновлень / вставок поза запланованим процесом завантаження, тому він сильно індексується.
Прийнято рішення спробувати розділити цю таблицю, і я маю певні занепокоєння щодо індексації розділеної таблиці. Я не маю досвіду роботи з розділенням, тому будь-які дані або посилання оцінюються. Я не міг знайти конкретно те, що я хочу на BOL або msdn.
В даний час ми кластеризуємося на поле, яке ми будемо називати IncidentKey
, varchar(50)
а не унікальне - у нас може бути від 1 до 100 записів з однаковимиIK
(будь-яких коментарів, будь ласка). Ми часто отримуємо нові дані про старі IncidentKey
записи, тому вони також не є послідовними.
Я розумію, що мені потрібно включити моє поле розділів IncidentDate
, в мій кластерний індексний ключ, щоб розділ працював правильно. Я думаю, що це було бIncidentKey, IncidentDate
.
Питання полягає в тому, як буде працювати механізм кластеризованого індексу над 2-частинним ключем у розділеній таблиці, якщо запис у «новому» розділі повинен бути перед записом у «старому» розділі в кластерному індексі?
Наприклад, у мене є 5 записів:
IncidentKey Date
ABC123 1/1/2010
ABC123 7/1/2010
ABC123 1/1/2011
XYZ999 1/1/2010
XYZ999 7/1/2010
Якщо я отримаю новий запис, ABC123, 2/1/2011
він повинен бути в кластерному індексі ДО ПЕРЕД XYZ999, 1/1/2010
. Як це працює?
Я припускаю фрагментацію та покажчики, але я не можу знайти будь-яку інформацію про фізичне зберігання та конфігурацію нерозподілених кластерних індексів на розділених таблицях з клавішами подвійної частини.