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]