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
答
只是胡乱猜测,但你可能需要在这三个外键索引:
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,所以应该已经被索引。在这个时候,我认为有大量的行和/或数据库运行的硬件不够强大。
请适当地格式化你的SQL,并提供对数据库的一些背景。 “EXPLAIN SELECT ...”的输出是最好的选择。 – wuputah 2010-09-24 18:52:59
@ Stargazer712:感谢您对此进行格式化,我感到头晕目眩。 – egrunin 2010-09-24 18:53:28
需要多长时间?表中的项目数量?你有没有在数据库中的film_id字段上建立索引? – 2010-09-24 18:53:55