开发者社区 问答 正文

mysql 两张表关联优化

有三张表:

用户表:用户信息表
关联表:主要包含user_id和topic_id,user_id为用户表外键,topic_id为帖子表外键,大概有1000多万行

帖子表:帖子的详细信息,大概500万行

用户表与帖子表多对多

现在需要取出某个用户关注的所有帖子,按照帖子表中的created_at进行排序

我已经测试的两个方案:

方案一:将两个表INNER JOIN,where语句过滤,性能非常不好

方案二:先从关联表中取出符合条件的所有帖子,然后使用IN filesort,性能能将就忍受,但是有些用户关联出来的帖子超过1万之后,性能就下降得很快了

我现在加的都是单列索引,使用到的列都已经加了索引了,还是不行,不知道关联的时候索引该怎么加合适,又或者表结构不应该这么设计,有没有什么好的方法,谢谢!

展开
收起
小旋风柴进 2016-03-10 16:02:58 3145 分享 版权
1 条回答
写回答
取消 提交回答
  • 用MySQL的EXPLAIN分析一下,看一下是不是索引的原因.
    一般的关联只要有索引,效率还是挺高的.我能考虑还有可能因素:MySQL的临时内存区太小,导致大表关联创建临时表的时候出现大量磁盘IO.

    2019-07-17 18:57:50
    赞同 展开评论