有三张表:
用户表:用户信息表
关联表:主要包含user_id和topic_id,user_id为用户表外键,topic_id为帖子表外键,大概有1000多万行
帖子表:帖子的详细信息,大概500万行
用户表与帖子表多对多
现在需要取出某个用户关注的所有帖子,按照帖子表中的created_at进行排序
我已经测试的两个方案:
方案一:将两个表INNER JOIN,where语句过滤,性能非常不好
方案二:先从关联表中取出符合条件的所有帖子,然后使用IN filesort,性能能将就忍受,但是有些用户关联出来的帖子超过1万之后,性能就下降得很快了
我现在加的都是单列索引,使用到的列都已经加了索引了,还是不行,不知道关联的时候索引该怎么加合适,又或者表结构不应该这么设计,有没有什么好的方法,谢谢!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
用MySQL的EXPLAIN分析一下,看一下是不是索引的原因.
一般的关联只要有索引,效率还是挺高的.我能考虑还有可能因素:MySQL的临时内存区太小,导致大表关联创建临时表的时候出现大量磁盘IO.