1

是否有任何方法可以优化以下查询以提高速度?执行大约需要 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'
)

上面的查询工作并按要求检索所有数据,只要我添加多个左连接,它就需要很长时间。

谢谢。

已编辑。

在查询前面添加 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

对不起,但我不太确定如何解释。

4

2 回答 2

0
  1. EXPLAIN通过在您的查询前面放置来检​​查有什么问题。
  2. 设置您的索引,以便您的连接和您的位置可以使用它们。
  3. EXPLAIN再次检查你
  4. 起泡,冲洗,重复。

提示:您可能需要以下索引:

c.qualification_name 
q.ref
c.instructor_number 
u.instructor_number
c.venue_token 
v.token
c.status
于 2012-04-26T11:00:16.780 回答
0

从您发布的解释来看,查询似乎没有使用索引。确保 q.ref、u.instructor_number 和 v.token 被索引

于 2012-04-26T11:08:15.357 回答