子查询优化
子查询优化为连接查询
a表中的某一列数据在b表中也有,但在b表中可能有重复的情况
可以使用连接查询加DISTINCT来代替子查询
group by优化
查询演员及演员所参演的电影数量:
EXPLAIN SELECT actor.first_name,actor.last_name,COUNT(*) FROM film_actor INNER JOIN actor USING(actor_id) GROUP BY film_actor.actor_id
可以看到使用了临时表和文件排序
优化:
EXPLAIN SELECT actor.first_name,actor.last_name,c.cnt FROM actor INNER JOIN (SELECT actor_id,COUNT(*) AS cnt FROM film_actor GROUP BY actor_id) AS c USING(actor_id)
如果增加过滤条件,则在子查询里增加,而不是外层