2010-12-09 70 views
5

我試圖獲得需要採取的調查存儲在seotc,並完成調查,存儲seotcresults_v2的計數。 seotc表擁有近10萬條記錄,而seotcresults_v2表佔據了大約一半。我怎樣才能加快這個查詢?加快這個MySQL的聲明

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 

UPDATE:

感謝所有的答覆。表結構(最低限度)如下:

seotc: | Id |時鐘| CampusID |期限|

seotcresults_v2: | Id |時鐘| CampusID |期限| Q1 | Q2 | ...等

Id在每個表的調查中自動遞增的索引和調查結果

其中「Clock」是一個ID爲講師,並可以在seotcseotcresults_v2表中找到多次因爲他們有多個班級,並且針對多個學期爲每個班級完成多個調查。我基本上試圖根據給定學期內給定校園教師的調查數量與給定相同參數的發佈結果數量來確定迴應率。這有幫助嗎?

我將嘗試運行EXPLAIN以及很快。

+1

您可能想要將表結構添加到您的問題。 – 2010-12-09 15:58:05

+0

你在這些表上定義了哪些索引? – 2010-12-09 15:58:22

回答

4

首先要檢查的是WHERE子句列索引?

然後:你需要ORDER BY,這是一種排序,而且很貴。

最後,是索引的.clock列嗎?

0

我不認爲這個查詢甚至會給你正確的結果。

爲campusID和Term添加一個索引,並且可能是clock。然後嘗試此查詢:

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