• Inspiración
  • Tutoriales
  • Bootcamp

Planer

  • Inspiración
  • Tutoriales
  • Bootcamp

El problema de las n+1 queries en Ruby on Rails

El Active Record de Ruby on Rails tiene muchas cosas geniales, pero algunas de ellas si no las manejas bien pueden repercutir negativamente en el rendimiento de la aplicación.

Uno de los errores más frecuentes de los desarrolladores novatos de rails es el problema de las N+1 queries.

El problema sucede cuando intentando realizar una sola consulta a la base de datos termina haciendo N+1 consultas, y aunque cuando uno tiene una base de datos con pocos datos el efecto es casi invisible, a medida de que crece el número de datos y el número de clientes este problema puede llegar a impactar de forma muy dura en el rendimiento de tu aplicación a tal punto de botarla.

¿Cuándo ocurre?

El problema ocurre cuando se itera sobre los hijos de uno de los objetos del modelo, para analizarlo sobre un caso práctica imaginemos que tenemos 2 modelos, uno de usuario y el otro de pins y cada usuario tiene muchos pins.

Modelo para el experimento

Específicamente el problema se hace visible en la iteración de los resultados.

El código que causa el problema es el siguiente:

Ahora cuando uno trabaja bajo un paradigma MVC es raro que uno tenga el código de esta forma, lo más probable es que el llamado a todos los usuarios se haga en la página index y luego dentro de la vista usuario se itere sobre los resultados mostrando por ejemplo los 5 mejores pins de cada usuario, pero el resultado es exactamente el mismo, n+1 llamados a la base de datos.

Para este caso de pruebas se tienen 2 usuarios, Diego y Gonzalo y uno tiene 3 pins y el otro ninguno, y aquí podemos observar que que se hicieron 2 queries a la base de datos en lugar de solo 1.

Para solucionarlo en el mismo momento que hacemos el query debemos incluir a los hijos del modelo, en nuestro caso el query inicial debió haber sido.

User.all.includes(:pin)

De esta forma se hace una sola consulta a la base de datos, ahora repitamos el experimento anterior y comparemos resultados.

Y vemos que ahora solo hay una consulta.

Oct 15, 2014Gonzalo Sánchez
Share
  • El Autor
  • Últimos Posts

About Gonzalo Sánchez

Emprendedor lean, Ingeniero civil informático dedicado al desarrollo de una mejor web con ruby on rails. Fanático de los números y las métricas y por sobre todo fundador de en1mes.
  • Yeni maceralar 🎰 için Alev Casino seni çağırıyor - September 16, 2025
  • Bahiscom giriş yaptıktan sonra hangi promosyonlar var? - September 16, 2025
  • Bahis severler arasında popüler olan Bahiscom güncel giriş adresi güven verir - September 15, 2025
  • Sharpen your skills through demo Keno slot practice - September 15, 2025
  • Canlı bahis severler için kazançlı fırsatlar Lüks casino giriş ile geliyor - September 15, 2025
  • Mostbet ile eglenceli zaman gecirin - September 14, 2025
  • Alev ⭐ Casino kullanıcılarına özel kampanyaları keşfet - September 13, 2025
  • Casino Alev Guncel Giris ile Yuksek Bonus Fırsatları - September 12, 2025
  • Türkiye’de güvenilir altyapısıyla öne çıkan Lüks casino güncel giriş çözümleri - September 11, 2025
  • Alev casino güncel giriş ile bonuslar seni bekliyor - September 11, 2025
October 15, 2014 Bases de datos, Ruby, TutorialesBases de datos, optimización, Ruby on Rails
Gonzalo Sánchez

Emprendedor lean, Ingeniero civil informático dedicado al desarrollo de una mejor web con ruby on rails. Fanático de los números y las métricas
y por sobre todo fundador de en1mes.

56 razones de peso para aprender a programarImágenes de fondo con Background-cover de CSS3

Leave a Reply Cancel reply

Tags
mostbetslotticamostbet UZslottica PLkudos casino no deposit bonuskudos casino bonus codeskudos casino free chipkudos casino loginRuby on Railskudos casino sister siteskudos casino free spinskudos casino no deposit bonus codesaviatoraviator KZozwincasinoozwincasino AUemprendimientos digitalesfortunetigerfortunetiger BRTutorialesDiseño20bet plbet20 casinokudos casinoLondonLondon UZ20 betbj88slottica BR20bet casino logowanie20bet kasynoHerramientas20 bet casinohtml5gratogana entrargratogana juegos en vivo20bet logowanieWordpressrubyLanding PageBases de datosplaycroco casinoplay crocogratogana onlineparty poker casino
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • PADANGTOTO
  • Interesado en otros tipos de emprendimiento?

    Quieres aprender a importar y exportar productos a todo el mundo? entra aquí

  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • LOMBOKTOTO
  • No te pierdas ningún artículo.

  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • RAMALANTOTO
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • IRAMATOGEL
  • 2025 © UGMSLOT
    Planer theme by Dankov