10. 如何避免 N+1?
什么是 N+1 问题?
N+1 是 ORM 数据层查询时,最常见的、也是危害性很大的性能问题。
为了更好地帮助理解,我们用一个例子来演示。还是以 Larabbs 为例子,浏览器访问首页,打开 Debugbar 并定位到数据库请求统计栏目下:
为了方便演示,我们修改读取数据的请求如以下:
app/Http/Controllers/TopicsController.php
<?php
.
.
.
class TopicsController extends Controller
{
.
.
.
public function index(Request $request, Topic $topic, User $user, Link $link)
{
// 取出数据,无「预加载」的情况,存在 N+1 问题
$topics = $topic->paginate(100);
$active_users = $user->getActiveUsers();
$links = $link->getAllCached();
return view('topics.index', compact('topics', 'active_users', 'links'));
}
.
.
.
}
保存后刷新页面,可以感...