Melhor Desempenho em Big Update no Postgresql (Adicional)

Posted Over 9 years ago. Visible to the public.

SEQUÊNCIA

VAMOS AO CARD

Em continuidade aos outros cards, veja um caso bem específico pode ser ainda mais ágil.

Se trata de um caso em que a tabela A a ser atualizada irá apresentar em sua nova coluna B.campo1 valores variáveis no qual um deles é muito mais frequente que os outros. Isto é, caso o campo1 no final da atualização fosse ser preenchido com 90% de valor1 e apenas 10% de outros valores.

Neste caso bem específico, a atualização pode ser feita diretamente na tabela A sem a necessidade de utilizar toda a manobra de tabela A_new. Para isso são necessários apenas 3 passos:

  • Criar a coluna campo1 na tabela A diretamente com defaultValue de valor valor1
  • Atualizar a tabela A por uma SQL que substitua este valor1 pelo valor correto para os 10% que são diferentes
  • Remover do banco o defaultValue do campo1

Dessa forma toda a tabela já estará preenchida com o valor1 diretamente na criação da coluna, na reserva do espaço em disco que o postgres irá executar para 100% das tuplas. E o tempo gasto no update dos 10% de tuplas restantes pode ser ou pode não ser mais ágil que toda a manobra de tabela A_new e recriação dos índices...

Apenas testando para ter certeza se o seu caso compensa. Mas antes de tudo, para poder utilizar esta nova estratégia, você tem de conhecer de antemão a expectativa final dos valores que serão preenchidos no campo1 para poder selecionar o caso de maior incidência a ser utilizado como defaultValue.

Bruno Vieira
Last edit
Over 9 years ago
Bruno Vieira
Posted by Bruno Vieira to ZeroGlosa (2015-02-05 17:15)