Kuboresha Django ORM Queries
Django ORM inafanya kazi za kanzi data (database) kuwa rahisi. Lakini inaficha hatari fulani. Ukichukua (fetch) vitu vinavyohusiana vibaya, unasababisha tatizo la N+1 query.
Hii inamaanisha ikiwa utachukua machapisho (posts) 100, programu yako inaweza kuendesha query 101. Hii inafanya programu yako iwe nzito na kusimama kabisa.
Tumia zana hizi mbili kuzitatua:
- select_related
Tumia hii kwa ForeignKey na OneToOneField.
Inatumia SQL JOIN. Inapata data zinazohusiana katika query moja tu.
- Mfano: Post ina Mwandishi (Author) mmoja.
- Njia isiyo bora: query 101 kwa machapisho 100.
- Njia iliyoboreshwa: query 1 kwa kutumia .select_related("author").
- prefetch_related
Tumia hii kwa ManyToManyField na reverse ForeignKeys.
Inarun query tofauti na kuziunganisha ndani ya Python.
- Mfano: Post ina lebo (Tags) nyingi.
- Njia isiyo bora: query 1 kwa machapisho + query 1 kwa kila lebo ya kila chapisho.
- Njia iliyoboreshwa: jumla ya query 2 kwa kutumia .prefetch_related("tags").
Vidokezo vya Kitaalamu:
- Tumia object ya Prefetch kuchuja data zinazohusiana kabla hazijafika kwenye loop yako.
- Ziunganishe (Chain them). Unaweza kutumia zote mbili kwenye queryset moja ili kupata waandishi na lebo kwa wakati mmoja.
- Epuka kuitumia .filter() kwenye uhusiano ulioprefetch ndani ya loop. Hii inavuka cache na kugonga kanzi data tena.
- Tumia .only() pamoja na select_related ili kuchukua safu (columns) unazohitaji tu.
Muhtasari:
- ForeignKey / OneToOne: Tumia select_related.
- ManyToMany / Reverse FK: Tumia prefetch_related.
Angalia idadi ya query zako kwa kutumia django-debug-toolbar ili kugundua matatizo haya mapema.