【问题标题】:MYSql Query PerformanceMYSql 查询性能
【发布时间】:2011-10-23 14:22:03
【问题描述】:

我有以下查询,我正在获取由 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'

我知道这确实是个愚蠢的问题,但在某些时候可能会有 10,000 个用户执行相同的查询,我只是想确保性能。那么还有比这更好的方法吗?

谢谢。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

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

    如果您确实发现此查询存在性能问题,您可以根据表名和列名的上下文存储和更新考试题的数量。假设添加和删除问题的情况并不多。

    【讨论】:

      【解决方案2】:

      您的LEFT JOIN 不能成为INNER JOIN 的任何原因?

      另外,请确保您有以下索引:

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

      【讨论】:

      • 使用LEFTINNER JOIN 有什么优势?我承认一直使用INNER,但无法证明这一点。
      • INNER JOIN 更快,但省略了找不到要加入的记录的结果。
      【解决方案3】:

      如果您不需要未定义问题的考试,以下应该更快:

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 2016-03-09
        相关资源
        最近更新 更多