为了账号安全,请及时绑定邮箱和手机立即绑定

 explain select actor.first_name, actor.last_name, count(*) from (film_actor inner join actor on film_actor.actor_id = actor.actor_id) group by actor.actor_id\G; 与这个相比, 我的这种写法的分析结果其实更好一点,区别就在于最后group by 的actor_id是用的actor的, 结果如下, 请问为何会这样。

+----+-------------+------------+-------+---------------+---------+---------+-----------------------+------+-------------+

| id | select_type | table      | type  | possible_keys | key     | key_len | ref                   | rows | Extra       |

+----+-------------+------------+-------+---------------+---------+---------+-----------------------+------+-------------+

|  1 | SIMPLE      | actor      | index | PRIMARY       | PRIMARY | 2       | NULL                  |   15 |             |

|  1 | SIMPLE      | film_actor | ref   | PRIMARY       | PRIMARY | 2       | sakila.actor.actor_id |   13 | Using index |

+----+-------------+------------+-------+---------------+---------+---------+-----------------------+------+-------------+


正在回答

1 回答

同问

难道是主键的原因?

在actor表中actor_id是主键

而在film_actor表中('actor_id','film_id')组合作为主键

http://img1.sycdn.imooc.com//565d80cc000190ad06440476.jpg

在两个执行计划的对比中看到

如果group by actor.actor_id

在查actor表时 用到了primary key

565d82810001315a05000430.jpg

而 GROUP BY film_actor.actor_id 时 没有用到索引

565d82800001b3ff05000425.jpg


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信