Разница между коэффициентом заполнения таблицы и коэффициентом заполнения индекса


16

В Postgres можно задать коэффициент заполнения как для индекса, так и для таблицы. В чем разница? Как определить значения для любого. Каковы случаи использования?

Я пытаюсь сгруппировать пространственное отношение по пространственному индексу. У него есть пара миллионов записей. Записи обновляются постоянно, хотя каждый день создается очень мало новых.

Вариант использования - запросы пространственного диапазона. Что будет хорошим значением для фактора заполнения таблицы и / или фактора заполнения индекса?

Ответы:


12

Со страницы справочника CREATE TABLE (выделение добавлено):

Коэффициент заполнения таблицы составляет от 10 до 100 процентов. 100 (полная упаковка) используется по умолчанию. Если указан меньший коэффициент заполнения, операции INSERT упаковывают страницы таблицы только до указанного процента; оставшееся место на каждой странице зарезервировано для обновления строк на этой странице. Это дает UPDATE возможность разместить обновленную копию строки на той же странице, что и оригинал, что более эффективно, чем размещение ее на другой странице. Для таблицы, записи которой никогда не обновляются, лучшим выбором является полная упаковка, но в сильно обновленных таблицах подходят меньшие коэффициенты заполнения.

Со справочной страницы CREATE INDEX (выделение добавлено):

Коэффициент заполнения индекса - это процент, который определяет, насколько полно метод индекса будет пытаться упаковать страницы индекса. Для B-деревьев листовые страницы заполняются до этого процента во время первоначального построения индекса, а также при расширении индекса справа (самые большие значения ключа). Если впоследствии страницы будут полностью заполнены, они будут разделены, что приведет к постепенному снижению эффективности индекса.B-деревья используют коэффициент заполнения по умолчанию, равный 90, но можно выбрать любое значение от 10 до 100. Если таблица является статической, то коэффициент заполнения 100 лучше всего минимизировать физический размер индекса, но для сильно обновленных таблиц меньший коэффициент заполнения лучше минимизировать необходимость разделения страницы. Другие методы индекса используют fillfactor разными, но примерно аналогичными способами; коэффициент заполнения по умолчанию зависит от метода.


1
Принято указывать источник цитаты. Даже если это легко понять.
Эрвин Брандштеттер

да, конечно) иногда забывай ...

Извините, что ныть еще. Пожалуйста, дайте ссылку на текущую версию руководства (если вам не нужно указывать конкретную версию). Я редактировал. Подробнее об этом здесь .
Эрвин Брандштеттер

Ссылки обратные.
Дэйв Йохансен

2
Re: «Если таблица является статической, то коэффициент заполнения 100 лучше всего минимизировать физический размер индекса, но для сильно обновленных таблиц фактор заполнения меньшего размера лучше минимизировать необходимость разделения страниц». Попытка понять контекст «сильно обновленных таблиц» - означает ли это таблицу со значениями строк, которые сильно обновляются, или, возможно, могут ли они также включать таблицы со строками, которые часто вставляются и / или удаляются? Я хотел знать, может ли моя таблица, с небольшими изменениями в значениях строк, но с обширными вставками и удалениями, выиграть от более низкого коэффициента заполнения по ее основному (ключевому) индексу.
Рейнсбрейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.