Diferencia entre el factor de relleno de la tabla y el factor de relleno del índice


16

En Postgres, se puede establecer el factor de relleno para un índice y una tabla. ¿Cuál es la diferencia? Cómo decidir los valores para cualquiera. ¿Cuáles son los casos de uso?

Estoy tratando de agrupar una relación espacial en un índice espacial. Tiene un par de millones de registros. Los registros se actualizan todo el tiempo, aunque se crean muy pocos nuevos diariamente.

El caso de uso es consultas de rango espacial. ¿Cuál será un buen valor para el factor de relleno de la tabla y / o el factor de relleno del índice?

Respuestas:


12

Desde la página del manual CREATE TABLE (énfasis agregado):

El factor de relleno para una tabla es un porcentaje entre 10 y 100. 100 (empaque completo) es el valor predeterminado. Cuando se especifica un factor de relleno más pequeño, las operaciones INSERT empaquetan las páginas de la tabla solo con el porcentaje indicado; el espacio restante en cada página está reservado para actualizar filas en esa página. Esto le da a ACTUALIZAR la oportunidad de colocar la copia actualizada de una fila en la misma página que el original, lo cual es más eficiente que colocarla en una página diferente. Para una tabla cuyas entradas nunca se actualizan, el empaque completo es la mejor opción, pero en tablas muy actualizadas son apropiados los factores de relleno más pequeños.

Desde la página del manual CREATE INDEX (énfasis agregado):

El factor de relleno para un índice es un porcentaje que determina qué tan completo el método de índice intentará empaquetar las páginas de índice. Para los árboles B, las páginas de hoja se llenan con este porcentaje durante la creación inicial del índice, y también al extender el índice a la derecha (valores clave más grandes). Si posteriormente las páginas se llenan por completo, se dividirán, lo que conducirá a una degradación gradual de la eficiencia del índice.Los árboles B usan un factor de relleno predeterminado de 90, pero se puede seleccionar cualquier valor de 10 a 100. Si la tabla es estática, entonces el factor de relleno 100 es mejor para minimizar el tamaño físico del índice, pero para tablas muy actualizadas, un factor de relleno más pequeño es mejor para minimizar la necesidad de divisiones de página. Los otros métodos de índice usan el factor de relleno de maneras diferentes pero más o menos análogas; el factor de relleno predeterminado varía entre los métodos.


1
Es costumbre mencionar la fuente de una cotización. Incluso si es fácil de entender.
Erwin Brandstetter

sí, claro) olvida a veces ...

Perdón por fastidiar un poco más. Enlace a la versión actual del manual (a menos que necesite abordar una en particular). Yo edité. Más sobre eso aquí .
Erwin Brandstetter

Los enlaces están al revés.
Dave Johansen el

2
Re: "Si la tabla es estática, entonces el factor de relleno 100 es mejor para minimizar el tamaño físico del índice, pero para tablas muy actualizadas, un factor de relleno más pequeño es mejor para minimizar la necesidad de divisiones de página". Intentar comprender el contexto de "tablas muy actualizadas": ¿eso significa tabla con valores de fila que están muy actualizados, o tal vez eso también podría incluir tablas con filas que se insertan y / o eliminan con frecuencia? Quería saber si mi tabla, con pocos cambios en los valores de fila pero inserciones y eliminaciones extensas, podría beneficiarse de un factor de relleno inferior en su índice principal (clave).
Reinsbrain
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.