Entendiendo select_related y prefetch_related en Django

Explicación clara en español sobre select_related vs. prefetch_related en Django, cómo evitan N+1, con ejemplos prácticos y consejos de rendimiento.

2 sept 2025 • 4 min de lectura • Equip Q2BSTUDIO

Inteligencia-Artificial-

En una entrevista técnica me preguntaron la diferencia entre select_related y prefetch_related en Django. Aquí tienes una explicación clara, en español y con ejemplos prácticos, para que puedas optimizar tus consultas y evitar el famoso problema N+1.

N+1 sucede cuando obtienes una lista de objetos y, por cada uno, haces otra consulta para traer datos relacionados. Resultado: muchas idas y vueltas a la base de datos, lentitud y más carga. La ORM de Django ofrece dos herramientas clave para resolverlo: select_related y prefetch_related. Ambas reducen consultas, pero funcionan de forma distinta.

Qué es select_related

Cómo funciona: se usa con relaciones de valor único como ForeignKey y OneToOneField. Hace un JOIN en SQL para traer el objeto y su relacionado en una sola consulta. Es ideal cuando sabes que vas a acceder al dato relacionado en cada fila.

Ejemplo de modelos

class Author(models.Model):

name = models.CharField(max_length=100)

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.ForeignKey(Author, on_delete=models.CASCADE)

Sin select_related

books = Book.objects.all()

for book in books:

print(book.author.name)

Cada iteración dispara una consulta adicional

Con select_related sobre el campo author

books = Book.objects.select_related(author)

for book in books:

print(book.author.name)

Se hace una sola consulta con JOIN y se evita N+1 en relaciones uno a uno o muchos a uno

Qué es prefetch_related

Cómo funciona: se usa con relaciones de múltiples valores como ManyToMany y el lado inverso de ForeignKey. Ejecuta varias consultas por separado y las combina en Python. Es ideal cuando hay que cargar colecciones relacionadas.

Ejemplo de modelos

class Author(models.Model):

name = models.CharField(max_length=100)

class Book(models.Model):

title = models.CharField(max_length=100)

author = models.ForeignKey(Author, on_delete=models.CASCADE)

Sin prefetch_related

authors = Author.objects.all()

for author in authors:

for book in author.book_set.all():

print(book.title)

Se dispara una consulta por cada autor

Con prefetch_related sobre el conjunto inverso

authors = Author.objects.prefetch_related(book_set)

for author in authors:

for book in author.book_set.all():

print(book.title)

Se resuelve en pocas consultas totales y Django hace el emparejamiento en memoria

Diferencias clave

select_related trabaja con ForeignKey y OneToOneField, hace un JOIN y trae todo en una sola consulta, perfecto para objetos relacionados únicos.

prefetch_related trabaja con ManyToMany y el reverso de ForeignKey, ejecuta varias consultas y las combina en Python, perfecto para colecciones relacionadas.

Regla práctica usa select_related para relaciones de un solo elemento y usa prefetch_related para colecciones. Si tu vista lista libros con su autor, select_related encaja de maravilla. Si tu vista lista autores con sus libros, prefetch_related es la elección correcta.

Se pueden combinar por ejemplo, en un listado de libros puedes aplicar select_related de author y prefetch_related de reviews para optimizar ambos tipos de relación a la vez.

Consejos de rendimiento limita los campos con only o defer cuando no necesitas todas las columnas, añade índices adecuados en claves foráneas y campos de filtrado, y valida con django debug toolbar o query logging que realmente estás reduciendo el número de consultas.

En Q2BSTUDIO ayudamos a equipos a construir aplicaciones a medida y software a medida de alto rendimiento, con buenas prácticas de ORM, testing y despliegue continuo. Si buscas un partner para desarrollo de aplicaciones a medida y software multiplataforma o quieres automatizar procesos críticos de negocio, también ofrecemos servicios de automatización de procesos para escalar con eficiencia.

Además, contamos con un equipo especialista en inteligencia artificial e IA para empresas, diseño e implementación de agentes IA, ciberseguridad y pentesting, servicios cloud AWS y Azure, así como servicios inteligencia de negocio con Power BI. Este enfoque integral nos permite entregar soluciones de extremo a extremo, desde la arquitectura hasta la observabilidad y la seguridad, alineadas con tus objetivos.

Palabras clave relacionadas con nuestro trabajo diario y que también forman parte de nuestras soluciones: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi. Si tu organización necesita acelerar productos digitales o mejorar el rendimiento de sus consultas con Django, estamos listos para acompañarte.

Conclusión: select_related reduce las consultas en relaciones uno a uno o muchos a uno mediante un JOIN, mientras que prefetch_related reduce las consultas en relaciones muchos a muchos o uno a muchos agrupando resultados y combinándolos en Python. Dominar estas técnicas te ayudará a evitar cuellos de botella y a mantener tu proyecto de Django ágil y escalable.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Intel·ligència artificial

Agents d'IA, chatbots i assistents intel·ligents que automatitzen tasques i atenen els teus clients 24/7 per millorar l'eficiència del teu negoci.

Més info

Desenvolupament de programari

Aplicacions web, mòbils i d'escriptori, intranets, e-commerce, SaaS i plataformes de gestió dissenyades per a les necessitats concretes de la teva empresa.

Més info

Serveis cloud

Migració, infraestructura, hosting gestionat, alta disponibilitat i seguretat en Microsoft Azure i Amazon Web Services perquè el teu negoci escali sense límits.

Més info

Ciberseguretat i pentesting

Auditories de seguretat, test d'intrusió (pentesting) i protecció d'aplicacions, dades i infraestructura on-premise i cloud, amb hacking ètic i compliment normatiu.

Més info

Business Intelligence

Quadres de comandament i anàlisi de dades amb Power BI: integrem les teves fonts, dissenyem dashboards i KPIs i convertim les teves dades en decisions.

Més info

Automatització de processos

Automatitzem tasques repetitives i connectem les teves aplicacions amb n8n, Power Automate, Make i RPA, eliminant treball manual i augmentant la productivitat.

Més info

Formació per a empreses

Formem els teus equips en tecnologia amb criteri: desenvolupament web, bases de dades, Git, bones pràctiques i seguretat, automatització amb n8n, intel·ligència artificial per a empreses i creació de solucions d'IA amb Azure AI Foundry.

Més info

Auditoria de codi

Auditem el codi que creguis tu, el teu equip o una IA: et diem què està bé i què millorar, el securitzem i el deixem llest per a producció, web o app.

Més info

Generació d'imatges amb IA

Creem per tu les imatges que necessita el teu negoci amb intel·ligència artificial: producte, xarxes, publicitat, il·lustració i avatars. Tu ens dius què vols i t'ho lliurem llest per fer servir.

Més info

Generació de vídeos amb IA

Creem per tu vídeos amb intel·ligència artificial: promocionals, per a xarxes, presentadors virtuals, doblatge i animacions. Ens comptes la idea i t'ho lliurem muntat i llest per publicar.

Més info

Avatars conversacionals amb IA

Creem avatars conversacionals amb IA —humans digitals amb cara i veu— que atenen els teus clients i equips amb el coneixement de la teva empresa, a la teva web, monitors interactius, WhatsApp o Teams.

Més info

Màrqueting Online i IA

Google Ads, Meta Ads, LinkedIn Ads i posicionament en motors d'IA (GEO/AEO): captem clients i fem que la teva marca aparegui on et busquen, també a ChatGPT, Gemini i Perplexity.

Més info

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.