Menu

Django ORM on Millions of Rows: 6 Fixes That Actually Matter
📰

Django ORM on Millions of Rows: 6 Fixes That Actually Matter

DEV Community: django·sizan mahmud0·2 days ago
#xlyEmZL7
#devtodjango#devto#dev#order#objects
Reading 0:00
15s threshold

Most slow Django apps aren't slow because of the ORM. They're slow because of a few repeatable mistakes that get worse as tables grow.

Quick wins

Measure first

print ( Order . objects . filter ( status = " paid " ). explain ( analyze = True ))

Enter fullscreen mode

Exit fullscreen mode

Fix N+1

orders = ( Order . objects . select_related ( " customer " ) . prefetch_related ( " items " ) . filter ( status = " paid " )[: 1000 ] )

Enter fullscreen mode

Exit fullscreen mode

Load fewer columns

emails = list ( User . objects . values_list ( " email " , flat = True ))

Enter fullscreen mode

Exit fullscreen mode

Keyset pagination instead of deep OFFSET

def next_page ( last_id = None , size = 100 ): qs = Order . objects . order_by ( " id " ) if last_id : qs = qs . filter ( id__gt = last_id ) return list ( qs [: size ])

Enter fullscreen mode

Exit fullscreen mode

Bulk writes and DB-side updates

Order . objects . bulk_update ( changed_orders , [ " status " ], batch_size = 1000 ) Order . objects .…

Continue reading — create a free account

Join HashtagPLUS to read full articles, follow hashtags, vote, and join the conversation.