mysql group by与limit_mysql的group by优化跟limit优化

优化group by查询:

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;

上面这条sql 使用到了临时表,文件排序,因此可以进行下列改写:

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);

此方法用了子查询进行查询优化

优化Limit查询

limit常用于分页处理,时常会伴随order by从句使用,因此大多数时候会使用Filesorts这样会造成大量的IO问题

SELECT film_id, description FROM sakila.film ORDER BY title LIMIT 50,5;

优化步骤1:使用有索引的列或者主键进行Order by 操作

SELECT film_id, description FROM sakila.film ORDER BY film_id LIMIT 50, 5;

步骤2:记录上次返回的主键,在下次查询时使用主键过滤

SELECT film_id, description FROM sakila.film WHERE film_id > 55 and film_id <= 60 ORDER BY film_id LIMIT 1, 5;此方法避免了数据量大时扫描过多的记录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值