我有以下查询,我正在为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
我觉得不错。只需确保连接列匹配并且是索引即可。我不会预先优化它。
如果您确实发现此查询存在性能问题,则可以通过表名和列名的上下文来存储和更新考试中的问题数量。假设添加和删除问题的次数不多。