Что такое N+1 проблема в ORM?

Ответ

N+1 - при загрузке N записей для каждой выполняется дополнительный запрос к связанной таблице:

// N+1: 1 запрос на посты + N запросов на авторов
$posts = Post::all();              // SELECT * FROM posts
foreach ($posts as $post) {
    echo $post->author->name;     // SELECT * FROM users WHERE id = ?  (x N раз!)
}

// Решение: eager loading
$posts = Post::with('author')->get();
// SELECT * FROM posts
// SELECT * FROM users WHERE id IN (1, 2, 3, ...)  (1 запрос!)

// Другие решения:
// JOIN
// Подзапрос
// DataLoader pattern (batch loading)
// Laravel: withCount(), loadMissing()

Инструменты обнаружения: Laravel Debugbar, Clockwork, query log.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.