我似乎不知道这是为了我的生命:x
我有两张桌子。
当我查询一个概要文件时,每个概要文件可以在标记链接表中有多个条目。检索标记链接后,我希望从标记数据表中获取标记文本。
我可以用:SELECT * FROM platform.tagWords WHERE tagId IN (SELECT tagId FROM platform.user sProfilesTags WHERE userId = 1001)
但是它会遍历每个标记(大约5万),然后检查是否分配给用户,所以这并不完全是一个解决方案,因为每个查询需要5-8秒。
有办法扭转这种局面吗?
任何建议或建议都将不胜感激。
提前感谢!
*最新情况
所以我试着试着加入,但我也被困在那里了
SELECT
GROUP_CONCAT(tagWords.tagWord SEPARATOR ', ') AS tags,
usersProfiles.*
FROM platform.users u
INNER JOIN platform.usersProfilesTags ON usersProfilesTags.userId = u.userId
INNER JOIN platform.usersProfiles ON usersProfiles.userId = u.userId
INNER JOIN platform.tagWords ON tagWords.tagId = usersProfilesTags.tagId
WHERE u.userName = 'mattstest'发布于 2010-12-16 00:31:56
您的第一个查询看起来很好。如果要花费5-8秒,那么您可能在usersProfilesTags(userId)上缺少一个索引。
尝试在一个查询中执行此操作比执行两个单独的查询要困难,而且可能要慢:一个查询用于获取概要文件,另一个查询用于获取标记。通常,当您运行多个简单查询而不是一个大型复杂查询时,MySQL工作得最好。子查询是一个相对较新的特性,通常性能很差。
还请注意,您缺少了一个用于GROUP BY查询的GROUP_CONCAT()。您需要在userProfiles列表中列出GROUP BY中的每一列。
https://stackoverflow.com/questions/4456257
复制相似问题