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

Como você torna o Python / PostgreSQL mais rápido?


Não perca tempo criando perfis. A hora está sempre nas operações do banco de dados. Faça o mínimo possível. Apenas o número mínimo de inserções.

Três coisas.

Um. Não SELECIONE repetidamente para conformar as dimensões Data, Nome do host e Pessoa. Busque todos os dados UMA VEZ em um dicionário Python e use-o na memória. Não faça seleções singleton repetidas. Use o Python.

Dois. Não atualize.

Especificamente, não faça isso. É um código ruim por dois motivos.
cursor.execute("UPDATE people SET chats_count = chats_count + 1 WHERE id = '%s'" % person_id)

Ele deve ser substituído por um simples SELECT COUNT(*) FROM ... . Nunca atualize para incrementar uma contagem. Basta contar as linhas que estão lá com uma instrução SELECT. [Se você não pode fazer isso com um simples SELECT COUNT ou SELECT COUNT(DISTINCT), alguns dados estão faltando -- seu modelo de dados deve sempre fornecer contagens completas corretas. Nunca atualize.]

E. Nunca construa SQL usando substituição de string. Completamente burro.

Se, por algum motivo, o SELECT COUNT(*) não for rápido o suficiente (benchmark primeiro, antes de fazer qualquer coisa ruim), você pode armazenar em cache o resultado da contagem em outra tabela. DEPOIS de todas as cargas. Faça um SELECT COUNT(*) FROM whatever GROUP BY whatever e insira isso em uma tabela de contagens. Não atualize. Sempre.

Três. Use variáveis ​​de vinculação. Sempre.
cursor.execute( "INSERT INTO ... VALUES( %(x)s, %(y)s, %(z)s )", {'x':person_id, 'y':time_to_string(time), 'z':channel,} )

O SQL nunca muda. Os valores vinculados mudam, mas o SQL nunca muda. Isso é MUITO mais rápido. Nunca crie instruções SQL dinamicamente. Nunca.