SELECT resumeid, FirstName, LastName, Mobile, State, EmailId, Role,
Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
from Resume r
where DetailsCaptured='Y'
and resumeid IN (
SELECT resumeid FROM Resume_Attachment ra
WHERE MATCH (ResumeTextContent)
AGAINST ('+"quality"' in boolean mode) )
order by UpdatedDate desc
limit 100
最佳答案
对于不相关子查询,最好使用JOIN
而不是IN
或EXISTS
。不管怎样,IN ( SELECT ... )
,至少在旧版本中,性能很糟糕。
如果这是“惰性评估”的尝试,则由于 WHERE
中的额外测试,它将无法工作。
所以,让我们简化查询:
SELECT resumeid, FirstName, LastName, Mobile, State, EmailId,
Role, Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
FROM Resume r
WHERE DetailsCaptured='Y'
AND MATCH (ResumeTextContent) AGAINST ('+"quality"' in boolean mode) )
ORDER BY UpdatedDate desc
LIMIT 100
优化器将
- 首先进行
FULLTEXT
查找;这很快,但可能会返回超过 100 个resumeid
值; - 获取第 1 步中找到的行(我假设resumeid 是主键——提供 SHOW CREATE TABLE 总是有帮助的。)
- 忽略任何与
WHERE
其余部分不匹配的内容 --DetailsCaptured='Y'; - 排序(
ORDER BY
) - 剥离 100 行。
您不会比这更快 - 除非您可以“知道”“大多数”行包含“质量”。
关于mysql - 提高Mysql查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42787003/