加快这个MySQL声明

时间:2010-12-09 15:55:46

标签: mysql query-optimization

我正在努力获取存储在seotc中需要采取的调查计数,并完成调查计数,存储seotcresults_v2seotc表保存了近10万条记录,seotcresults_v2表保存了大约一半的记录。如何加快查询速度?

SELECT 
  DISTINCT seotcresults_v2.Clock, 
  COUNT(seotc.Id) AS Surveys, 
  COUNT(seotcresults_v2.Id) AS Complete 
FROM seotc 
JOIN seotcresults_v2 ON seotcresults_v2.Clock = seotc.Clock
WHERE seotcresults_v2.CampusID = 40
AND seotcresults_v2.Term = 201011
ORDER BY seotc.Clock

更新:

感谢所有回复。表格结构(最低限度)如下:

seotc: | Id |时钟| CampusID |期限|

seotcresults_v2: | Id |时钟| CampusID |期限| Q1 | Q2 | ...等

Id是调查和调查结果的每个表中的自动递增索引

其中“Clock”是教师的ID,可以在seotcseotcresults_v2表中多次找到,因为它们有多个类,并为每个类完成了多个调查多个术语。我基本上试图根据给定学期中给定学校的教师的调查数量与给定相同参数的结果数量来确定响应率。这有帮助吗?

我很快就会尝试运行EXPLAIN。

2 个答案:

答案 0 :(得分:4)

首先要检查的是:WHERE子句列是否已编入索引?

然后:你需要ORDER BY,这是一种排序,而且价格昂贵。

最后,.clock列是否已编入索引?

答案 1 :(得分:0)

我认为这个查询甚至不会给你正确的结果。

为campusID和Term以及可能的时钟添加索引。然后尝试此查询:

SELECT seotcresults_v2.Clock, 
       COUNT(seotc.Id) AS Surveys, 
       COUNT(seotcresults_v2.Id) AS Complete 
FROM seotc 
JOIN seotcresults_v2 ON seotcresults_v2.Clock = seotc.Clock
WHERE seotcresults_v2.CampusID = 40
AND seotcresults_v2.Term = 201011
GROUP by seotcresults_v2.Clock
ORDER BY seotcresults_v2.Clock