以下查询需要 56 秒才能返回 18 行。该表criteria
包含大约 14,200 条记录。该表criteria_interests
包含 42,500 条记录。criteria_languages
包含 8 条记录。
如果我删除两个LEFT JOIN
s,它会很快工作。在真正的搜索查询中,会有使用criteria_interests
andcriteria_languages
表的条件。
对于criteria_interests
andcriteria_languages
表,除了主键之外,我不能有任何索引,因为该cid
字段不是唯一的。任何人都可以看到如何加快速度?
SELECT criteria.id, criteria.uid
FROM user_profile
INNER JOIN criteria
ON ( criteria.id = user_profile.cid )
LEFT JOIN criteria_interests
ON ( criteria_interests.cid = user_profile.cid )
LEFT JOIN criteria_languages
ON ( criteria_languages.cid = user_profile.cid )
GROUP BY criteria.id
LIMIT 0, 18
以下是结果EXPLAIN
: