Certas atualizações demoram muito em tabelas grandes do Postgres. Dadas estas condições:
- apenas uma coluna está sendo atualizada e não é indexada
- a coluna já contém dados para cada linha devido a uma atualização anterior
- os dados não estão mudando de tamanho (por exemplo, reescrevendo um valor booleano)
- não há nenhuma outra coluna nesta ou em qualquer outra tabela que dependa do valor da coluna que está sendo atualizada
- não há outras consultas sendo realizadas no banco de dados (este é um banco de dados de pesquisa pessoal em uma estação de trabalho, não um banco de dados corporativo)
- existem índices em outras colunas
- unidade giratória (não SSD) com Bitlocker e PC rápido com Windows 8.1 x64
- a tabela tem 10 milhões de linhas e 60 colunas
...você pensaria que a atualização levaria um tempo razoável em relação às expectativas de mídia giratória com o Bitlocker. Não estamos criando mais dados, portanto, os dados existentes não precisam ser movidos no HDD, apenas precisam ser substituídos. Os outros índices não devem precisar de alterações. Etc. Em vez disso, após 20 horas de moagem constante do HDD, canso-me de esperar e paro a consulta. Se eu soltar todos os índices em outras colunas e executar novamente a consulta, levará apenas cerca de 30 minutos.
Por que os índices em colunas irrelevantes para esta consulta aumentam o tempo de atualização?