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

Gravação de dataframe no desempenho ruim do Postgresql


Respondendo eu mesmo à pergunta 1:Parece que o problema tinha mais a ver com o Postgresql (ou melhor, bancos de dados em geral). Levando em consideração os pontos feitos neste artigo:https://use-the- index-luke.com/sql/dml/insert Encontrei o seguinte:

1) A remoção de todos os índices da tabela de destino resultou na execução da consulta em 9 segundos. A reconstrução dos índices (no postgresql) levou mais 12 segundos, então ainda está bem abaixo das outras vezes.

2) Com apenas uma chave primária no lugar, a inserção de linhas ordenadas pelas colunas da chave primária reduziu o tempo necessário para cerca de um terço. Isso faz sentido, pois deve haver pouco ou nenhum embaralhamento das linhas de índice necessárias. Também verifiquei que esta é a razão pela qual minha junção cartesiana no postgresql foi mais rápida em primeiro lugar (IE as linhas foram ordenadas pelo índice, puramente por acaso), colocando as mesmas linhas em uma tabela temporária (não ordenada) e inserindo a partir disso realmente levou muito mais tempo.

3) Eu tentei experiências semelhantes em nossos sistemas mysql e encontrei o mesmo aumento na velocidade de inserção ao remover índices. Com o mysql, no entanto, parecia que a reconstrução dos índices consumia qualquer tempo ganho.

Espero que isso ajude qualquer outra pessoa que se depare com essa pergunta em uma pesquisa.

Ainda me pergunto se é possível remover a etapa de gravação para csv em python (Q2 acima), pois acredito que poderia escrever algo em python que seria mais rápido que o postgresql puro.

Obrigado, Giles