我正在學習Django及其ORM數據訪問方法,並且有一些我很好奇。在一個特定的終點,我做了一些數據庫調用(以Postgres的) - 下面是一個示例:Django QuerySet與原始SQL性能注意事項
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]
正如你可以看到,這是一個不小的查詢 - 我拉在很多具體的相關數據和做一些字符串操作。我比較關心性能,所以我盡我所能,通過使用select_related()
和values()
來獲得我需要的東西,從而提高效率。
我的問題是,在概念上和廣義上講,使用參數化SQL而不是使用ORM編寫我的查詢會變得更快 - 因爲ORM必須首先「翻譯」上述「混亂「)?在什麼樣的查詢複雜性水平下,我應該切換到原始SQL?
任何洞察將有所幫助。謝謝!
好文章。我想我可能會打印出該圖。 – Snowie
很高興你喜歡它,如果你喜歡它,請upvote我的答案。謝謝 – tom
'用於將ORM查詢轉換爲原始SQL查詢的附加翻譯層將影響性能'如果您執行基準測試,則會發現完全相反。效果可以忽略不計。 – e4c5