MYSql查询性能


MYSql Query Performance

我有以下查询,我正在为CreatorID 1001 创建的考试获取问题计数

SELECT count(Questions.question_id) QuestionCount 
    FROM Exams 
        LEFT JOIN Questions  
            ON Exams.exam_id = Questions.exam_id_fk 
    WHERE Exams.CreatorId='1001'

我知道这是一个非常愚蠢的问题,但在某种程度上,可能有10000个用户执行相同的查询,我只想确保性能。那么,还有比这更好的方法吗?

谢谢。

如果您不需要在没有定义问题的情况下进行考试,那么以下操作应该会更快:

SELECT
  count(Questions.question_id) QuestionCount 
FROM Exams 
INNER JOIN Questions  
        ON Exams.exam_id = Questions.exam_id_fk 
WHERE Exams.CreatorId='1001'

还要确保在适当的字段上有一个索引。请尝试在查询中使用EXPLAIN

您的LEFT JOIN不能成为INNER JOIN的原因是什么?

此外,请确保您在上有索引

  • Exams.CreatorId
  • Exams.exam_id
  • Questions.exam_id_fk

我觉得不错。只需确保连接列匹配并且是索引即可。我不会预先优化它。

如果您确实发现此查询存在性能问题,则可以通过表名和列名的上下文来存储和更新考试中的问题数量。假设添加和删除问题的次数不多。