开发者社区 问答 正文

mysql where uid in (2000个uid) 的优化或更好的存储方案

有这样一个需求,要存储千万级的帖子,十万级的用户然后给定2000个用户ID,需要按照帖子发表时间,从这2000个用户发过的帖子中查出最新的10000个帖子给定的2000各用户中,其中10个非常活跃,可能这最新10000个帖子只是这10个用户发表的这种情况该如何存储,如何查询

展开
收起
蛮大人123 2016-02-07 19:00:38 4364 分享 版权
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    加上一个测试结果初步的测试结果select * from dynamics where uid in ({$uidStr}) order by created_at desc limit 10000上面这种查询,其中dynamics表记录在3百万左右,$uidStr是2000个mysql(5.5)0.19s 左右(where in 情况下,created_at索引好像没有用上)mongodb$cursor =$dyCollection->find(array("uid" => array('$in' => $selectedUid)))->sort(array("created_at"=>-1))->limit(10000);对created_at建立索引后,0.09s 左右另外如果插入mongodb是按时间顺序插入的话,其实可以不用再排序了,查出来的就是当时插入的顺序,但是mysql where in的话,取出来的结果好像是按in那个字段升序排的另外limit减少到3000以下的时候,mysql只需要0.04s,mongodb只需要0.02s,

    2019-07-17 18:39:22
    赞同 展开评论