【发布时间】:2013-05-17 23:57:46
【问题描述】:
我正在编程的网站有问题。在我有页面和子页面的网站部分上,事情有点慢。 这部分我有很多 mySQL 查询,有 20 多个查询同时执行, 让我等待最多 5 秒钟,直到出现任何东西。
我读了这个问题Is 20 SQL Queries per page load really considered a lot? 并发现我确实有问题......而madlep 的回答提到了这种N+1 的情况,我在foreach 中为每个页面查询数据库,寻找它的孩子。
这是一个例子(顺便说一下,我使用的是 Laravel):
$pages = Page::where('slug', '=', $slug)->get(array('id', 'title', 'slug'));
foreach ($pages as $page) {
$children = Page::where('parent_id', '=', $page->id)->get(array('id', 'title', 'slug'));
foreach ($children as $child) {
$grandChildren = Page::where('parent_id', '=', $child->id)->get(array('id', 'title', 'slug'));
}
}
作为一个新手,我正在努力寻找一种更好的方法来处理这个问题,减少页面查询。
问题是:如何在 foreach 循环之外获取子页面?一切都是动态完成的,所以我需要一种灵活的方法来处理这个问题。
【问题讨论】:
标签: mysql sql performance webpage