文章评论表,使用什么方式查询效率最高?

问题描述

问题场景

app首页一次性展示100篇文章,每篇文章会显示最新3条评论

方案一

Db::table('article as a')
    ->leftJoin('comment as b', 'a.id', '=', 'b.article_id')
    ->offset(0)
    ->limit(100)
    ->get()
    ->toArray();
然后通过php循环处理结果集

方案二

\app\model\Article::with(['comment' => function ($query) use () {
    }])->get()
        ->map(function ($query) {
            $query->setRelation('comment', $query->comment->take(3));
            return $query;
        })
        ->toArray();
上述直接一次性查出

问题?

哪个方案查询效率高些?文章表和评论表都是百万级别的。
其中方案二“$query->setRelation('comment', $query->comment->take(3));”,这句是啥意思呢?是不是从数据库中拿出所有的(全表获取),然后再截取3段?还是已经从评论表中获取3条了(limit 3)?
大家还有更好的方案没?

753 4 0
4个回答

luohonen

你不会用模型么? 模型关联,模型添加字段

ysxpark

$query->setRelation('comment', $query->comment->take(3));
看样子应该是查了所有,然后再取了三条,你可以看数据库日志确认下

PHP甩JAVA一条街

一对多关系,通俗的来讲:首页显示100篇文章,每篇文章显示最新3条评论
要求速度最快,最优,效率最高,大家有啥好办法解决?

  • 暂无评论
不败少龙

要的信息存在一张表里,岂不是就没有关联查询了

年代过于久远,无法发表回答
🔝