首页 > 代码库 > mysql group by优化
mysql group by优化
mysql> explain select actor.first_name,actor.last_name,count(*) from sakila.film_actor inner join sakila.actor using(actor_id) group by film_actor.actor_id\G*************************** 1. row *************************** id: 1 select_type: SIMPLE table: actor type: ALLpossible_keys: PRIMARY key: NULL key_len: NULL ref: NULL rows: 200 Extra: Using temporary; Using filesort*************************** 2. row *************************** id: 1 select_type: SIMPLE table: film_actor type: refpossible_keys: PRIMARY,idx_fk_film_id key: PRIMARY key_len: 2 ref: sakila.actor.actor_id rows: 1 Extra: Using index2 rows in set (0.00 sec)mysql>
从explain看,上面的写法使用了临时表和文件排序
改写后
mysql> explain select actor.first_name,actor.last_name,c.cnt from sakila.actor inner join (select actor_id,count(*) as cnt from sakila.film_actor group by actor_id) as c using(actor_id)\G*************************** 1. row *************************** id: 1 select_type: PRIMARY table: actor type: ALLpossible_keys: PRIMARY key: NULL key_len: NULL ref: NULL rows: 200 Extra: NULL*************************** 2. row *************************** id: 1 select_type: PRIMARY table: <derived2> type: refpossible_keys: <auto_key0> key: <auto_key0> key_len: 2 ref: sakila.actor.actor_id rows: 27 Extra: NULL*************************** 3. row *************************** id: 2 select_type: DERIVED table: film_actor type: indexpossible_keys: PRIMARY,idx_fk_film_id key: PRIMARY key_len: 4 ref: NULL rows: 5462 Extra: Using index3 rows in set (0.00 sec)mysql>
如果是有过滤条件的子查询,查询过滤条件尽量加到子查询条件中,而不要加到外面
mysql group by优化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。