mysql 中根据文章中的多个关键字来匹配其他文章的sql语句优化?
我有三个表是这样的,: 文章表 article:
关键字表 tag:
关键字与文章的关联表 article_tag:
要求: 给定一个文章的id(article_id) 通过关键字获取其他的文章并根据关联度排序! 我些的sql是这样的:
select article_id,count(*) as count from article_tag where tag_id in(select tag_id from article_tag where article_id=1) group by article_id order by count desc
但是对于article_tag 表在将近20w 的记录时 查询速度在3s多! 大家有没有什么还的优化建议(sql语句优化,表结构的优化,索引添加.....)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
tag_ids
做冗余,这样就省略了一个in的子查询。这个子查询如果在表article_tag
的article_id
列上没有索引的情况,效率很低。>
select tag_id from article_tag where article_id=1
article_tag
的tag_id
列索引,提高根据tag_id
查询的效率。针对你的需求,仅仅就sql查询的优化,差不多能想到的就这么多!在数据量不大的情况下(你列举的20w的级别),应该能够解决。下面说一些数据库之外的优化:
article
增加一列most_related_article_ids
,然后定时执行SQL去更新表article
的这个字段;