MySQL查询速度加入

时间:2012-04-26 10:57:41

标签: mysql performance join

有什么方法可以针对速度优化以下查询?执行大约需要6秒钟。每个表只包含大约1000条记录,因此它并不大。

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就需要很长时间。

感谢。

编辑。

在查询前添加EXPLAIN会返回此...

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

很抱歉,但我不太清楚如何解释。

2 个答案:

答案 0 :(得分:0)

  1. EXPLAIN放在查询前面,检查出错了。
  2. 设置您的连接,以便您的连接和您可以在哪里使用它们。
  3. 再次检查EXPLAIN
  4. 泡沫,冲洗,重复。
  5. 提示:您可能需要索引:

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

答案 1 :(得分:0)

在你发布的Explain中,它看起来不像查询使用索引。确保将q.ref,u.instructor_number和v.token编入索引