国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

APP首頁顯示100篇文章,每篇文章顯示最新3條評論。要求速度最快,效率最優(yōu),大家平常怎么解決的?

問題描述

最近一直思考這個問題,項目數(shù)據(jù)都是百萬級別的,百度了很多方案,貌似沒有最好的方案

1:循環(huán)查庫肯定不行了
2:鏈表查詢(行嗎)?
3:laravel ORM 模型(行嗎)?貌似也是取所有評論數(shù)據(jù),然后take切斷

不知道子查詢行不行,外層查詢100篇文章,子查詢最新3條評論,然后CONCAT_WS或者GROUP_WS連接評論

1392 12 0
12個回答

Dalong

Db::table('table')->limit(100)->select();

不行嗎

ysxpark

作緩存定時更新吧

nitron

百萬級能有多大,就算用1最壞情況也就是1+100個查詢,DB索引和緩存得當(dāng)這都不是問題

  • PHP甩JAVA一條街 2023-04-23

    哈哈, 上個項目, 才幾個月600w條了

  • nitron 2023-04-23

    基礎(chǔ)消耗是擺在那里(假定單條查詢?nèi)甲吡怂饕?,就算你怎么個去考慮如何寫,最終的基礎(chǔ)消耗都差不多,與其在這個地方扣細(xì)節(jié)(我看你已經(jīng)糾結(jié)了好多天了),不如在其他的地方考慮如何去降低使用基礎(chǔ)消耗的頻次(比如緩存)

    換我就想都不用想直接第一種+緩存簡單直接,別看它土但是有效啊,花時間琢磨些奇技淫巧最后發(fā)現(xiàn)浪費了時間卻沒卵用..

    你這個是文章,不是高頻交易,實時性沒有那么重要
    laravel ORM 偽代碼

    $atricles = db::table('article')->where(xxx)->orderby(xxx)->->limit(100)->get()->each(function($item){
        $tiem->comments = db::table('comments')->where(xxx)->orderby(xxx)->->limit(3)->get();
    });
    
  • PHP甩JAVA一條街 2023-04-23

    循環(huán)查庫啊

  • nitron 2023-04-24

    是啊,有什么問題么?

  • nitron 2023-04-25

    不要覺得我這個土,主表38個字段,2500萬數(shù)據(jù),關(guān)聯(lián)表41個字段,6600萬數(shù)據(jù),都走索引的情況下,用上面的方式執(zhí)行時間100ms左右

不敗少龍

laravel ORM 中的with去查詢評論呢?

小W

1.App一次性無法顯示100條,可以做成滾動加載模式
2.異步加載每條的評論

關(guān)鍵看數(shù)據(jù)庫表設(shè)計,以及app產(chǎn)品的設(shè)計。

muyu

sql或者orm層面沒有什么好的方案,可以如果是mysql8,可以使用窗口函數(shù)row_number和over試試,但是緩存是最佳的方案

brookeov
with(['comments' => function($query){
    $query->limit(3);
}])
  • 暫無評論
ab0029

使用Laravel ORM如下

$articles = Article::limit(100)->get();
$query = $articles->map(
    fn($query) => $query->comments()->limit(3)
)->reduce(
    fn($carry, $query) => $carry ? $carry->unionAll($query) : $query
);

$comments = $query->get();
  • ab0029 2023-04-24

    手動拼接成union all 語句,然后一條去sql去數(shù)據(jù)庫查詢,其他條件自己拼接即可

這多明顯,app顯示滿根本顯示不了100條,你這做個分頁,下拉加載就行了

  • 暫無評論
mon

不考慮反查最新評論,獲取300條最新評論的還有關(guān)聯(lián)的文章記錄,在用PHP整合一下就完事了么?[狗頭]

  • 暫無評論
縫合

首先,需要在文章表和評論表之間建立一對多的關(guān)聯(lián)關(guān)系,即在評論表中引入一列文章 id(article_id),表示評論所屬的文章。

假設(shè)文章表名為 article,具有 article_id、title、content 等列;評論表名為 comment,具有 comment_id、article_id、content 等列。

然后,使用以下 SQL 語句來查詢文章和對應(yīng)的最新3條評論:

SELECT a.title, a.content, c.content
FROM 
    (SELECT article_id, title, content FROM article LIMIT 100) a 
    LEFT JOIN 
    (
        SELECT article_id, content 
        FROM comment c1 
        WHERE (
            SELECT COUNT(*) 
            FROM comment c2 
            WHERE c2.article_id = c1.article_id AND c2.comment_id >= c1.comment_id
        ) <= 3
    ) c ON a.article_id = c.article_id 
ORDER BY a.article_id DESC, c.comment_id ASC

首先,使用子查詢獲取最新發(fā)布的100篇文章,限制顯示數(shù)量不超過100篇,以提高查詢效率。
然后,使用左連接將文章和評論合并起來,并使用子查詢獲取每篇文章的最新3條評論。
最后,按照文章 id 降序排列,評論 id 升序排列,確保結(jié)果集中的評論是最新的前三條。
需要注意的是,以上 SQL 語句僅供參考,具體實現(xiàn)還需要針對實際情況進行調(diào)整和優(yōu)化。同時,還需要注意索引和緩存的使用以提高查詢效率。

  • 暫無評論
小Z先生

查詢出文章然后循環(huán)拼接查詢評論的sql union all

如:

( SELECT id,article_id, content FROM comment where id =1 limit 3)
union all
( SELECT id,article_id, content FROM comment where id =2 limit 3)
  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??