mysql中group by优化

如果需要对关联查询(inner join)做分组(group by),并且按照关联表(actor)中的某个列进行分组,那么通常采用关联表(actor)的标识列(actor_id)分组的效率比其他列更高:

select actor.first_name,actor.last_name,count(*) from film_actor inner join actor using(actor_id) group by actor.actor_id;

替换了

group by actor.first_name,actor.last_name

这个查询利用了演员的姓名(first_name和last_name)和actor_id直接相关的特点,但是不是所有的关联语句的查询都可以改写成select中直接使用非分组列(first_name,last_name)的形式的。甚至服务器设置sql_mode(ONLY_FULL_GROUP_BY)来禁止这样的写法。如果是这样,可以用min(),max()函数绕过这样的限制,但是一定要清楚,select后面出现的非分组列一定是直接依赖分组列,并且在每一个组内的值是唯一的,或者业务根本不在乎这个值具体是什么。

select min(actor.first_name),max(actor.last_name) .......

 

posted @   ppjj  阅读(1333)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示