J'apprends Django et sa méthodologie d'accès aux données ORM et il y a quelque chose que je suis curieux. Dans un point final particulier, je fais un certain nombre d'appels de base de données (à Postgres) - ci-dessous est un exemple de:Django QuerySet vs considérations de performance SQL brut
projects = Project.objects\
.filter(Q(first_appointment_scheduled=True) | (Q(active=True) & Q(phase=ProjectPhase.meet.value)))\
.select_related('customer__first_name', 'customer__last_name',
'lead_designer__user__first_name', 'lead_designer__user__last_name')\
.values('id')\
.annotate(project=F('name'),
buyer=Concat(F('customer__first_name'), Value(' '), F('customer__last_name')),
designer=Concat(F('lead_designer__user__first_name'), Value(' '), F('lead_designer__user__last_name')),
created=F('created_at'),
meeting=F('first_appointment_date'))\
.order_by('id')[:QUERY_SIZE]
Comme vous pouvez le voir, ce n'est pas une petite question - je tire dans un beaucoup de données spécifiques et connexes et de manipulation de chaînes. Je suis relativement préoccupé par les performances, donc je fais de mon mieux pour rendre les choses plus efficaces en utilisant select_related()
et values()
pour obtenir exactement ce dont j'ai besoin. La question que j'ai est, conceptuellement et en termes généraux, à quel point il devient plus rapide d'écrire mes requêtes en utilisant SQL paramétré au lieu d'utiliser l'ORM (puisque l'ORM doit d'abord "traduire" le désordre ci-dessus ")? À quel niveau approximatif de complexité des requêtes dois-je passer au SQL brut?
Un aperçu serait utile. Merci!
Bon article.Je pense que je pourrais imprimer ce diagramme. – Snowie
content que vous avez aimé, s'il vous plaît upvote ma réponse si vous l'utile .. merci – tom
'Couche de traduction supplémentaire pour convertir une requête ORM en requête SQL brute aura une incidence sur les performances' Si vous faites un benchmark, vous trouverez le contraire. L'effet est négligeable. – e4c5