[英]Increase the Performance of Query In Mysql?
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
值; WHERE
其余部分不匹配的内容-DetailsCaptured ='Y'; ORDER BY
) 您将不会比这更快—除非您可以“知道”“大多数”行都包含“质量”。
作为@O。 琼斯评论说,无法确定。 索引DetailsCaptured可能会改善您的性能,尽管大多数时间可能会由IN子句和全文搜索占用。
请尝试以下替代方法。
SELECT resumeid, FirstName, LastName, Mobile, State, EmailId, Role, Skill, Relocation, EmpType, ImmType, TotalExp, Buzzwords
FROM Resume r
WHERE DetailsCaptured='Y'
AND EXISTS (SELECT resumeid FROM Resume_Attachment ra WHERE ra.resumeid=r.resumeid AND ResumeTextContent LIKE '%quality%' COLLATE utf8_general_ci)
ORDER BY UpdatedDate DESC LIMIT 100
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.