Mostrando entradas 1 para 2
Displaying posts with tag: n+1 (reset)
Conheça o problema do N+1

Você se preocupa com o desempenho das suas aplicações? Então é imprescindível que você saiba o que é o problema do N + 1 e também conheça como identificá-lo e corrigi-lo. Essa é uma grave falha que diversos programadores iniciantes (e até intermediários, por incrível que pareça) não conhecem, causando grande perda de performance em suas aplicações.

O que é o problema do N + 1

Vamos considerar uma base de dados com duas tabelas: uma de usuários e outra de posts, como ilustrado na imagem a seguir.

A tabela Usuários armazena as informações dos usuários, como nome, email, senha etc. A tabela de posts, além dos dados dos posts, como título e conteúdo, …

[Leia mais]
Usando a técnica stitch-and-query

O problema N+1

É mais fácil descrever o problema N+1 através de exemplo. Dê uma olhada no seguinte trecho de PHP em app hipotético de blog:

<?php
/**
* @var Solar_Sql_Adapter|Zend_Db_Adapter
* $sql An SQL database connection object.
*/

// 1 query to get 10 blog posts.
$stmt = 'SELECT * FROM posts LIMIT 10';
$posts = $sql->fetchAll($stmt);

// 10 queries (1 per blog post) to get
// the comments for each post
foreach ($posts as &$post) {

$stmt = 'SELECT *
FROM comments
WHERE post_id = :post_id';

$bind = array(
'post_id' => $post['id'],
);

$post['comments'] = $sql->fetchAll(
$stmt,
$bind
);
}

Temos um conjunto mestre de linhas (as postagens do blog), mas precisamos ainda buscar muitas linhas de comentários para cada artigo do blog. Para fazer isso, nós fizemos um loop pelo conjunto mestre de linhas e lançamos uma query para cada um. Isso leva a várias linhas de comentários para esse artigo do blog.

[Leia mais]
Mostrando entradas 1 para 2