PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Quando usar tabelas herdadas no PostgreSQL?


Existem algumas razões principais para usar herança de tabela no postgres.

Digamos que temos algumas tabelas necessárias para estatísticas, que são criadas e preenchidas a cada mês:
statistics
    - statistics_2010_04 (inherits statistics)
    - statistics_2010_05 (inherits statistics)

Neste exemplo, temos 2.000.000 linhas em cada tabela. Cada tabela tem uma restrição CHECK para garantir que apenas os dados do mês correspondente sejam armazenados nela.

Então, o que torna a herança um recurso interessante - por que é legal dividir os dados?
  • PERFORMANCE:Ao selecionar dados, selecionamos * FROM statistics WHERE date BETWEEN x e Y, e o Postgres usa apenas as tabelas, onde faz sentido. Por exemplo. SELECT * FROM statistics WHERE date BETWEEN '2010-04-01' AND '2010-04-15' verifica apenas a tabela statistics_2010_04, todas as outras tabelas não serão tocadas - rápido!
  • Tamanho do índice:não temos uma tabela big fat com um índice big fat na data da coluna. Temos tabelas pequenas por mês, com índices pequenos - leituras mais rápidas.
  • Manutenção:podemos executar vácuo completo, reindexar e agrupar em cada tabela mensal sem bloquear todos os outros dados

Para o uso correto da herança de tabela como impulsionador de desempenho, consulte o manual do postgresql. Você precisa definir restrições CHECK em cada tabela para informar ao banco de dados, em qual chave seus dados são divididos (particionados).

Faço uso pesado de herança de tabelas, principalmente quando se trata de armazenar dados de log agrupados por mês. Dica:Se você armazenar dados, que nunca serão alterados (registrar dados), crie ou indexe com CREATE INDEX ON () WITH(fillfactor=100); Isso significa que nenhum espaço para atualizações será reservado no índice - o índice é menor no disco.

ATUALIZAÇÃO:o padrão do fator de preenchimento é 100, de http://www.postgresql.org/docs/9.1/static/sql-createtable.html:

O fator de preenchimento de uma tabela é uma porcentagem entre 10 e 100. 100 (empacotamento completo) é o padrão