Теперь я понимаю, что кластерный индекс содержит все данные строки, а не только поля индекса. Я пытаюсь понять последствия этого в отношении фрагментации.Изменит ли какой-либо фрагмент данных строки мой кластеризованный индекс?
Скажем, у нас есть таблица вроде этого:
create table Files
(
ID uniqueidentifier not null,
Field1 nvarchar(300) null,
Field2 nvarchar(300) null,
Field3 nvarchar(300) null,
Binary varbinary(max) null
)
Теперь давайте говорить, что все эти строки заполнены данными, а затем на некоторых из предыдущих строк в кластерном индексе вы вдруг установить Field1, Field2 , Field3 и Binary - null.
Одним из последствий этого, поскольку я думаю об этом по-моему наивным образом, является то, что очистка всех этих значений создаст пробелы, и индекс станет фрагментированным. Полагаю, что строки все еще в правильном порядке, так что это действительно фрагментация индекса?
Или вы можете думать об этом по-другому; если для них все началось с нуля, и вы вставляете данные, вам приходится перетасовывать данные на разные страницы, а также получать фрагментацию индекса?
Кроме того, я знаю, что данные LOB хранятся в отдельной единице выделения, хотя я не уверен, каковы последствия этого; означает ли это, что установка Binary на null (или заполнение) не должна влиять на фрагментацию кластерного индекса?
Что такое 'ID uniqueidentifier', вы используете' newsequentialid' для заполнения этого? –
Это кластеризованный индекс. Мы используем последовательный генератор ID в NHibernate, который должен делать почти то же самое, что и newsequentialid. – Gavin