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