mysql左连接查询需要很长时间才能执行

时间:2010-09-24 18:48:52

标签: sql mysql

这是我的查询,任何人都可以告诉我为什么这个查询花了很多时间执行...

select    gf_film.film_id,
          film_name,
          DATE_FORMAT(film_release_date,'%d') as date,
          DATE_FORMAT(film_release_date,'%m') as month_ori,
          DATE_FORMAT(film_release_date,'%M') as month,
          DATE_FORMAT(film_release_date,'%Y') as year,
          film_release_date,
          film_feature,
          film_modify,
          no_of_views,
          original_poster_url,
          (total_value/total_votes) as rate 
from      gf_film left join gf_film_views 
              on gf_film.film_id=gf_film_views.film_id 
          left join gf_film_poster 
              on gf_film.film_id=gf_film_poster.film_id 
          left join gf_film_rate 
              on gf_film.film_id=gf_film_rate.film_id 
order by  rate desc

这是解释表

id select_type table          type   possible_keys key  key_len     ref     rows    Extra
1  SIMPLE      gf_film        ALL    NULL          NULL     NULL    NULL    21434   Using temporary; Using filesort
1  SIMPLE      gf_film_views  eq_ref film_id       film_id  4   go4film.gf_film.film_id     1    
1  SIMPLE      gf_film_poster eq_ref film_id       film_id  4   go4film.gf_film.film_id     1    
1  SIMPLE      gf_film_rate   eq_ref PRIMARY       PRIMARY  4   go4film.gf_film.film_id     1    

3 个答案:

答案 0 :(得分:2)

只是一个疯狂的猜测,但你可能需要这三个外键的索引:

gf_film_views.film_id
gf_film_poster.film_id
gf_film_rate.film_id

答案 1 :(得分:0)

将您的ID字段编入索引,其执行时间将减少。

答案 2 :(得分:0)

我猜测连接字段是PK或FK,因此应该已经编入索引。在这个时候,我认为有大量的行和\或数据库运行的硬件不是那么强大。