mysql - 提高Mysql查询性能?

标签 mysql performance optimization

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而不是INEXISTS。不管怎样,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

优化器将

  1. 首先进行FULLTEXT查找;这很快,但可能会返回超过 100 个 resumeid 值;
  2. 获取第 1 步中找到的行(我假设resumeid 是主键——提供 SHOW CREATE TABLE 总是有帮助的。)
  3. 忽略任何与 WHERE 其余部分不匹配的内容 --DetailsCaptured='Y';
  4. 排序(ORDER BY)
  5. 剥离 100 行。

您不会比这更快 - 除非您可以“知道”“大多数”行包含“质量”。

关于mysql - 提高Mysql查询性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42787003/

相关文章:

performance - 在恒定时间内更新连续数字序列的平均值

java - 逐行以相反顺序读取文件,无需太多开销

performance - 有哪些不同的技术可以使超形态调用站点更加高效

mysql - 关于将 Join Query 转换为 Nested Subquery 的说明

php 无法使用子字符串

mysql - 表达 a = b = c 查询的最佳方式是什么?

optimization - "high contrast"曲线的快速公式

MySQL:选择最小日期和最大小时

java - int[0] 和 AtomicInteger 哪个更快?

algorithm - 基于字典的压缩算法的最佳子串选择