Обычно, когда я создаю индексы для таблиц, я предполагаю, каким должен быть Fill Factor
, основываясь на обоснованном предположении о том, как будет использоваться таблица (много чтений или много записей).
Существует ли более научный способ определения более точного значения Fill Factor
?
Можно попробовать запустить большой список реалистичных операций и посмотреть на очереди IO для различных действий.
Есть много переменных, которые управляют этим, например, размер каждой строки и количество записей и чтений.
В общем случае: высокий коэффициент заполнения = быстрое чтение, низкий = быстрая запись.
Однако не все так просто, поскольку почти все записи будут производиться в подмножество строк, которые необходимо сначала просмотреть.
Например: установите коэффициент заполнения 10%, и каждое обновление одной строки будет занимать в 10 раз больше времени, чтобы найти изменяемую строку, хотя разделение страницы в этом случае будет очень маловероятным.
Обычно коэффициенты заполнения составляют от 70% (очень высокая скорость записи) до 95% (очень высокая скорость чтения).
Это своего рода искусство.
Я считаю, что коэффициенты заполнения можно представить как страницы адресной книги - чем плотнее вы упаковываете адреса, тем сложнее их менять, но тем меньше книга. Думаю, я лучше объяснил это на моем блоге.
Я склоняюсь к мнению, что если вы хотите повысить производительность, то лучше потратить время в другом месте, настраивая схему, оптимизируя запросы и обеспечивая хорошее покрытие индексов. Коэффициент заполнения - это одна из тех вещей, о которых стоит беспокоиться только тогда, когда вы знаете, что все остальное в вашей системе оптимально. Я не знаю никого, кто мог бы это утверждать.