mysql左连接查询执行时间很长

mysql左连接查询执行时间很长,sql,mysql,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,

这是我的问题,谁能告诉我为什么这个问题要花很多时间执行

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    

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

我猜连接字段是PKs或FKs,因此应该已经编入索引。此时,我认为可能有大量的行和\或者数据库运行的硬件没有那么强大。

只是一个粗略的猜测,但您可能需要对这三个外键建立索引:

gf_film_views.film_id
gf_film_poster.film_id
gf_film_rate.film_id

请适当格式化SQL,并提供数据库的一些背景信息。
EXPLAIN SELECT…
的输出是最好的选择。@Stargazer712:谢谢你重新格式化,我感到头晕。要多久?表中的项目数?您是否在数据库中的film_id字段上建立了索引?如果没有表别名来显示哪些列来自哪个表,我就无法判断是否存在无关的join/etc