Mysql查询最近一条记录的sql语句(优化篇)
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,下策--查询出结果后将时间排序后取第一条select * from a where create_time<="2017-03-29 19:30:36" order by create_time de
千家信息网最后更新 2025年11月08日Mysql查询最近一条记录的sql语句(优化篇)
下策--查询出结果后将时间排序后取第一条
select * from a where create_time<="2017-03-29 19:30:36" order by create_time desclimit 1
这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时;limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间;还有如果需要批量取出最近一条记录,比方说:"一个订单表,有用户,订单时间,金额,需要一次性查询所有用户的最近的一条订单记录",那么每个用户一次查询就要做一次整表的遍历,数据大的情况下,时间将会以指数形式增长,不能投入实际使用。
中策--查询排序后group by
select * from ( select * from a where create_time<="2017-03-29 19:30:36" order by create_time desc) group by user_id
后来发现使用group by 可以根据group by 的参数列分组,但返回的结果只有一条,仔细观察发现group by是将分组后的第一条记录返回。时间在查询后默认是顺序排列,因此需要先将时间倒序排列,方可取出距离当前最近一条。
这样查询实际上还是进行了两次查询,虽然时间上相比第一个方法有了质的飞跃,但是还可以进一步优化。
上策--将max() 方法和group by结合使用
select *,max(create_time) from awhere create_time<="2017-03-29 19:30:36" group by user_id
这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。
扩展:
现在有一张资产设备表:base_assets_turn
查询资产的最新保管人
注:假设资产编号 ASSETS_ID=254
下策:
select * from base_assets_turn where ASSETS_ID = 254order by create_time desclimit 1
中策:
select * from ( select * from base_assets_turn where ASSETS_ID = 254order by create_time desc) tt GROUP BY tt.ASSETS_ID;
上策:
那么上策该如何书写呢,欢迎留言!
以上所述是小编给大家带来的Mysql查询最近一条记录的sql语句(优化篇),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!
查询
时间
结果
上策
数据
用户
订单
资产
分组
下策
实际
情况
方法
中策
排序
语句
巨大
最大
一次性
保管人
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
电脑本身有数据库
网络技术中什么是精确查找
数据库的特点是
上海新能源网络技术采购信息
网络安全ppt封面图片
一个电商网站服务器需要多少带宽
网络安全多媒体作品
网络安全数字化模式是什么
软件开发ac是角色
驾校软件开发项目标书案例
往网络安全方面发展需要学什么
管家婆连接服务器没反应
互联网 高校科技
为什么手机桌面无法连接服务器
网络安全挖矿
在网络中网关是典型的网络服务器
网络技术有限公司是干什么的
火绒安全软件能装服务器吗
银川正规软件开发系统
部队国家网络安全周
ig数据库
mac建立服务器软件
在日企做软件开发工作
双层网络技术
联想服务器不支持百兆
越客优品商城软件开发
2022最新服务器cpu天梯图
女30岁适合做软件开发吗
软件开发属于什么专业门类
湖南管理软件开发多少钱