表填充因子和索引填充因子之间的区别


16

在Postgres中,可以为索引和表设置fillfactor。有什么区别?如何确定两者的值。有哪些用例?

我正在尝试在空间索引上聚类空间关系。它有几百万条记录。尽管每天都会创建很少的新记录,但是记录会一直更新。

用例是空间范围查询。表填充因子和/或索引填充因子的合适值是什么?

Answers:


12

CREATE TABLE手册页(添加了重点):

表格的填充系数是10到100之间的百分比。默认值为100(完全打包)。当指定较小的填充因子时,INSERT操作仅将表页面打包至指定的百分比;每个页面上的剩余空间都保留用于更新该页面上的行。这使UPDATE有机会将行的更新副本与原始副本放置在同一页面上,这比将其放置在不同页面上更为有效。对于一个条目永远不会更新的表,完全打包是最佳选择,但是在更新频繁的表中,较小的填充因子是合适的。

CREATE INDEX手册页(添加了重点):

索引的填充因子是一个百分比,它确定索引方法将尝试打包索引页面的程度。对于B树,在初始索引构建期间以及在向右扩展索引(最大键值)时,叶子页将填充到该百分比。如果页面随后完全变满,它们将被拆分,导致索引效率逐渐下降。B树使用默认的填充因子90,但可以选择10到100之间的任何值。如果表是静态的,则fillfactor 100最好最大程度地减小索引的物理大小,但是对于大量更新的表,较小的fillfactor更好地最小化对页面拆分的需求。其他索引方法以不同但大致相似的方式使用填充因子;默认的填充因子因方法而异。


1
习惯上提到报价来源。即使很容易弄清楚。
Erwin Brandstetter 2012年

是的,肯定)有时会忘记……

抱歉na了一些。请链接到手册的当前版本(除非您需要解决特定的手册)。我编辑了。更多关于这里
Erwin Brandstetter,2012年

链接是向后的。
戴夫·约翰森

2
回复:“如果表是静态的,则fillfactor 100最好最大程度地减小索引的物理大小,但是对于更新频繁的表,较小的fillfactor更好地最大程度地减少对页面拆分的需求。” 试图了解“高度更新的表”的上下文-这是否意味着表的行值已被严重更新,或者是否还可能包含具有频繁插入和/或删除的行的表?我想知道我的表是否对行值进行了很少的更改,但进行了大量的插入和删除操作,是否可以从其主(键)索引的较低fillfactor中受益?
Reinsbrain
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.