2012-04-26 114 views
1

有什麼方法可以針對速度優化以下查詢:大約需要6秒鐘才能執行。每張表只包含大約1000條記錄,所以它不是很大。MySQL查詢速度加入

SELECT c. * , q.qualification_name, CONCAT(u.firstname, ' ', u.lastname) AS name, v.venue_name, v.address_town 
FROM p_courses c 
LEFT JOIN p_qualifications q ON c.qualification_name = q.ref 
LEFT JOIN p_users u ON c.instructor_number = u.instructor_number 
LEFT JOIN p_venues v ON c.venue_token = v.token 
WHERE (
c.status = 'completed' 
OR c.status = 'confirmed' 
) 

上面的查詢工作,並根據要求檢索所有的數據,它只是需要很長的時間,只要我添加多個LEFT JOIN。

謝謝。

EDITED。

添加解釋該查詢返回該前面...

id select_type table type possible_keys key key_len ref  rows Extra 
1 SIMPLE  c  ALL  NULL   NULL NULL  NULL 1288 Using where 
1 SIMPLE  q  ALL  NULL   NULL NULL  NULL 21 
1 SIMPLE  u  ALL  NULL   NULL NULL  NULL 518 
1 SIMPLE  v  ALL  NULL   NULL NULL  NULL 669 

很抱歉,但我不太知道如何解釋這一點。

回答

0
  1. EXPLAIN放在查詢前面檢查有什麼問題。
  2. 設置您的indeces以便您的連接和您的位置可以使用它們。
  3. 再檢查一下EXPLAIN
  4. 泡沫,沖洗,重複。

提示:你可能想在一個索引:

c.qualification_name 
q.ref 
c.instructor_number 
u.instructor_number 
c.venue_token 
v.token 
c.status 
+0

對不起,我知道格式是可怕的。 – Rob 2012-04-26 11:03:25

+0

你應該在你的問題中修改它,修正那裏的格式,但最重要的是,檢查它並看看你能從中找出什麼。正如我所說的,你需要在你加入的領域的索引/ /執行一個在哪裏,所以添加索引,並看看是否有幫助。不要只轉儲一個解釋,試試我建議:) – Nanne 2012-04-26 11:05:30

+0

格式化固定。所以看起來我需要在這些字段上添加索引。 – Rob 2012-04-26 11:13:42

0

從您發佈它看起來並不像查詢使用索引的解釋。確保q.ref,u.instructor_number和v.token被編入索引

+0

感謝您的幫助。 – Rob 2012-04-26 11:21:40