sql >> Base de Datos >  >> RDS >> PostgreSQL

Factor de relleno para un índice secuencial que es PK

FILLFACTOR

Con solo INSERT y SELECT deberías usar un FILLFACTOR de 100 en todas partes.

No tiene sentido dejar margen de maniobra por bloque de memoria si no va a "moverse" con UPDATE s.

El mecanismo detrás de FILLFACTOR es muy simple. INSERT s solo llena cada página de datos (generalmente bloques de 8 kb) hasta el porcentaje declarado por el FILLFACTOR ajuste. Además, siempre que ejecute VACUUM FULL o CLUSTER sobre la mesa se restablece el mismo margen de maniobra por bloque. Idealmente, esto permite UPDATE s para almacenar nuevas versiones de filas en la misma página de datos, lo que puede proporcionar un aumento sustancial del rendimiento cuando se trata de muchas UPDATE s. También es beneficioso en combinación con H.O.T. actualizaciones :

Si hay no actualizaciones, no pierda espacio para esto y configure FILLFACTOR = 100 .

Fuente básica de información:el manual sobre CREATE TABLE o CREATE INDEX .

Otra optimización

Pero puedes hacer algo más - ya que pareces ser un fanático de la optimización... :)

CREATE TABLE dev_transactions
( transaction_id serial PRIMARY KEY,
  gateway integer NOT NULL,
  moment timestamp NOT NULL,
  transaction_type smallint NOT NULL,
  status smallint NOT NULL,
  device integer NOT NULL,
  controler smallint NOT NULL,
  token integer,
  et_mode character(1));

Esto optimiza su tabla con respecto a la alineación de datos y evita relleno para un servidor típico de 64 bits y ahorra unos pocos bytes, probablemente solo 8 bytes en promedio; por lo general, no puede exprimir mucho con "column tetris:

Además, mantenga NOT NULL columnas al comienzo de la tabla por una bonificación de rendimiento muy pequeña.

Además, su tabla tiene 9 columnas . Esto significa 8 bytes adicionales para el mapa de bits NULL extendido - que encajaría en el mapa de bits NULL de 1 byte inicial para solo 8 columnas .
Si define et_mode y token NOT NULL , todas las columnas son NOT NULL y el mapa de bits NULL se usa en absoluto, liberando 8 bytes.
Esto incluso funciona por fila si no declara las columnas NOT NULL . Si todas las columnas tienen valores, no hay mapa de bits NULL para esta fila. En su caso, esto conduce al efecto de paradoja de que completar valores para et_mode y token puede hacer que el tamaño de su almacenamiento sea más pequeño o al menos permanecer igual:

Fuente básica de información:el manual sobre almacenamiento físico de bases de datos .

Compare el tamaño de las filas (llenas de valores) con su tabla original para obtener una prueba definitiva:

SELECT pg_column_size(t) FROM dev_transactions t;