Melhor Desempenho em Big Update no Postgresql (Adicional)

Posted . 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
Bruno Vieira
Posted by Bruno Vieira to ZeroGlosa (2015-02-05 17:15)