MySQL的左连接查询需要太多的时间来执行

MySQL的左连接查询需要太多的时间来执行

问题描述:

这是我的查询谁能告诉我,为什么这个查询需要很长时间EXCUTE ...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  
+0

请适当地格式化你的SQL,并提供对数据库的一些背景。 “EXPLAIN SELECT ...”的输出是最好的选择。 – wuputah 2010-09-24 18:52:59

+0

@ Stargazer712:感谢您对此进行格式化,我感到头晕目眩。 – egrunin 2010-09-24 18:53:28

+0

需要多长时间?表中的项目数量?你有没有在数据库中的film_id字段上建立索引? – 2010-09-24 18:53:55

只是胡乱猜测,但你可能需要在这三个外键索引:

gf_film_views.film_id 
gf_film_poster.film_id 
gf_film_rate.film_id 

化妆你的id字段被索引并且其执行时间会减少。

+3

我认为你的意思*减少* ... – egrunin 2010-09-24 18:53:55

+0

@egrunin thx,你是对的。 – 2010-09-24 19:02:17

我猜连接字段是PK或FK,所以应该已经被索引。在这个时候,我认为有大量的行和/或数据库运行的硬件不够强大。