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

¿Cuándo usar tablas heredadas en PostgreSQL?

Hay algunas razones importantes para usar la herencia de tablas en postgres.

Digamos que tenemos algunas tablas necesarias para las estadísticas, que se crean y completan cada mes:

statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

En esta muestra, tenemos 2.000.000 de filas en cada tabla. Cada tabla tiene una restricción CHECK para asegurarse de que solo se almacenen en ella los datos del mes correspondiente.

Entonces, ¿qué hace que la herencia sea una característica interesante? ¿Por qué es interesante dividir los datos?

  • RENDIMIENTO:al seleccionar datos, SELECCIONAMOS * DE estadísticas DONDE fecha ENTRE x e Y, y Postgres solo usa las tablas, donde tiene sentido. P.ej. SELECCIONE * DE estadísticas DONDE la fecha ENTRE '2010-04-01' Y '2010-04-15' solo escanea la tabla estadísticas_2010_04, todas las demás tablas no se tocarán, ¡rápido!
  • Tamaño del índice:no tenemos una tabla grande con un índice grande en la fecha de la columna. Tenemos tablas pequeñas por mes, con índices pequeños, lecturas más rápidas.
  • Mantenimiento:podemos ejecutar vacío completo, reindexar, agrupar en la tabla de cada mes sin bloquear todos los demás datos

Para el uso correcto de la herencia de tablas como potenciador del rendimiento, consulte el manual de postgresql. Debe establecer restricciones CHECK en cada tabla para indicarle a la base de datos en qué clave se dividen (particionan) sus datos.

Hago un uso intensivo de la herencia de tablas, especialmente cuando se trata de almacenar datos de registro agrupados por mes. Sugerencia:si almacena datos, que nunca cambiarán (datos de registro), cree o indexe con CREAR ÍNDICE EN () CON (factor de relleno =100); Esto significa que no se reservará espacio para actualizaciones en el índice; el índice es más pequeño en el disco.

ACTUALIZACIÓN:el factor de relleno predeterminado es 100, de http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

El factor de relleno de una tabla es un porcentaje entre 10 y 100. 100 (embalaje completo) es el valor predeterminado