PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment rendre Python / PostgreSQL plus rapide ?

Ne perdez pas de temps à profiler. Le temps est toujours dans les opérations de base de données. Faites-en le moins possible. Juste le nombre minimum d'insertions.

Trois choses.

Une. Ne faites pas SELECT maintes et maintes fois pour conformer les dimensions Date, Nom d'hôte et Personne. Récupérez toutes les données UNE FOIS dans un dictionnaire Python et utilisez-les en mémoire. Ne faites pas de sélections singleton répétées. Utilisez Python.

Deux. Ne pas mettre à jour.

Plus précisément, ne faites pas cela. C'est un mauvais code pour deux raisons.

cursor.execute("UPDATE people SET chats_count = chats_count + 1 WHERE id = '%s'" % person_id)

Il doit être remplacé par un simple SELECT COUNT(*) FROM ... . Ne jamais mettre à jour pour incrémenter un compte. Comptez simplement les lignes qui s'y trouvent avec une instruction SELECT. [Si vous ne pouvez pas le faire avec un simple SELECT COUNT ou SELECT COUNT(DISTINCT), il vous manque des données -- votre modèle de données doit toujours fournir des nombres complets corrects. Ne jamais mettre à jour.]

Et. Ne construisez jamais SQL en utilisant la substitution de chaîne. Complètement stupide.

Si, pour une raison quelconque, le SELECT COUNT(*) n'est pas assez rapide (benchmark d'abord, avant de faire quoi que ce soit de boiteux), vous pouvez mettre en cache le résultat du décompte dans une autre table. APRÈS toutes les charges. Faites un SELECT COUNT(*) FROM whatever GROUP BY whatever et insérez-le dans un tableau de décomptes. Ne pas mettre à jour. Jamais.

Trois. Utilisez les variables de liaison. Toujours.

cursor.execute( "INSERT INTO ... VALUES( %(x)s, %(y)s, %(z)s )", {'x':person_id, 'y':time_to_string(time), 'z':channel,} )

Le SQL ne change jamais. Les valeurs liées changent, mais le SQL ne change jamais. C'est BEAUCOUP plus rapide. Ne créez jamais d'instructions SQL de manière dynamique. Jamais.