Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос про fillfactor для кластерного индекса  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
Приветствую!
Ситауция в следующем:
Есть таблица T, у которой порядка 100 столбцов различных типов, включая текстовые поля varchar(128).
На поле ID int identity (1, 1) not NULL создан PRIMARY KEY CLUSTERED с fillfactor = 80
В таблице около 100000 записей. Каждый день добавляется/изменяется около 100 записей. Причем добавление/изменение идет параллельно от нескольких юзеров.

Правильно ли я понимаю, что при insert новой записи, без указания значений в полях типа varchar(128), в них прописывается NULL и место под эти поля не выделяется? А при изменении таких полей место выделяется и запись на странице данных leaf левела кластерного индекса расширяется? Т.е. если для кластерного индекса в моем случае поставить fillfactor = 100 и юзер проапдейтит у записи поле varchar(128) c NULL на 'комментарий юзера', то запись увеличится на 17 байт. И если запись будет находиться в уже полностью забитой странице, то она будет вынуждена расщепиться. Выходит, что в моем случае ставить fillfactor = 100 для кластерного ключа нет смысла?

И ещё вопрос:
В таблице присутствуют только числовые поля типа int, float, bit и одно поле GUID uniqueidentifier NULL ROWGUIDCOL default NewID().
На поле ID int identity (1, 1) not NULL создан PRIMARY KEY CLUSTERED. В этом случае оправдано ли будет выставление fillfactor = 100 на кластерном индексе? Ведь тут все поля фиксированной длины и их изменение не должно привести к увеличению длины записи?
9 ноя 12, 13:11    [13445688]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про fillfactor для кластерного индекса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
ROLpogo
Приветствую!
Ситауция в следующем:
Есть таблица T, у которой порядка 100 столбцов различных типов, включая текстовые поля varchar(128).
На поле ID int identity (1, 1) not NULL создан PRIMARY KEY CLUSTERED с fillfactor = 80
В таблице около 100000 записей. Каждый день добавляется/изменяется около 100 записей. Причем добавление/изменение идет параллельно от нескольких юзеров.

Правильно ли я понимаю, что при insert новой записи, без указания значений в полях типа varchar(128), в них прописывается NULL и место под эти поля не выделяется? А при изменении таких полей место выделяется и запись на странице данных leaf левела кластерного индекса расширяется? Т.е. если для кластерного индекса в моем случае поставить fillfactor = 100 и юзер проапдейтит у записи поле varchar(128) c NULL на 'комментарий юзера', то запись увеличится на 17 байт. И если запись будет находиться в уже полностью забитой странице, то она будет вынуждена расщепиться. Выходит, что в моем случае ставить fillfactor = 100 для кластерного ключа нет смысла?

И ещё вопрос:
В таблице присутствуют только числовые поля типа int, float, bit и одно поле GUID uniqueidentifier NULL ROWGUIDCOL default NewID().
На поле ID int identity (1, 1) not NULL создан PRIMARY KEY CLUSTERED. В этом случае оправдано ли будет выставление fillfactor = 100 на кластерном индексе? Ведь тут все поля фиксированной длины и их изменение не должно привести к увеличению длины записи?
Для полей фиксированной ширины место выделяется разу. Для полей переменной длины - по мере заполнения.
9 ноя 12, 13:15    [13445739]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про fillfactor для кластерного индекса  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
Гавриленко Сергей Алексеевич
Для полей фиксированной ширины место выделяется разу. Для полей переменной длины - по мере заполнения.


Т.е. можно сделать следующий вывод:
Если кластерный индекс построен на поле с indentity (добавление записей строго в конец) и все поля таблицы имеют фиксированную длину, то можно не задумываясь выставлять ему fillfactor = 100? Или есть какие-то причины, по которым 100 будет не лучшим выбором в данной ситуации?
9 ноя 12, 13:23    [13445835]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про fillfactor для кластерного индекса  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
ROLpogo
Гавриленко Сергей Алексеевич
Для полей фиксированной ширины место выделяется разу. Для полей переменной длины - по мере заполнения.


Т.е. можно сделать следующий вывод:
Если кластерный индекс построен на поле с indentity (добавление записей строго в конец) и все поля таблицы имеют фиксированную длину, то можно не задумываясь выставлять ему fillfactor = 100? Или есть какие-то причины, по которым 100 будет не лучшим выбором в данной ситуации?
Ну, может вы поле планируете добавить... А так - ставьте 100, конечно.
9 ноя 12, 13:25    [13445868]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос про fillfactor для кластерного индекса  [new]
ROLpogo
Member

Откуда: Реутов
Сообщений: 219
Гавриленко Сергей Алексеевич
Ну, может вы поле планируете добавить... А так - ставьте 100, конечно.

Спасибо!
9 ноя 12, 13:30    [13445917]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить