获取news_tags和users_tags

时间:2017-01-31 09:54:35

标签: mysql sql performance join

我有两张桌子:" news_tags"和" users_tags"。现在我想为特定新闻获得适当的用户。我的查询得到了正确的结果,但速度很慢。

到目前为止,这是我的查询:

SELECT `users_id`
FROM `users_tags`
WHERE `tags_id` IN (SELECT `tags_id` FROM `news_tags`
                    WHERE `news_id` = '$news_id')
GROUP BY `users_id`
ORDER BY `users_id`

有没有办法更快地完成它?

非常感谢招呼

1 个答案:

答案 0 :(得分:3)

转换为INNER JOIN会给你一个提升。

SELECT `users_id` FROM `users_tags` u INNER JOIN news_tags t 
ON u.tags_id = t.tags_id 
WHERE `news_id` = '$news_id' GROUP BY `users_id` ORDER BY `users_id`

然后确保news_idnews_tags上的索引以及tags_id users_tags上的索引

实际上,users_tags(tags_id,users_id)上的复合索引可能更好。所有这些都需要在查看EXPLAIN输出后确定。