Mysql查询最近一条记录的sql语句(优化篇)
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,下策--查询出结果后将时间排序后取第一条select * from a where create_time<="2017-03-29 19:30:36" order by create_time de
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
互联网是第几次科技革命的成果
互联网科技巨头监管
互联网科技行业发展
互联网通讯科技
北京互联网科技
金融科技与互联网金融
美国互联网科技
贷财互联网科技
上海万想互联网科技
互联网科技网站
深圳国际航运科技和互联网
北京华百购互联网科技有限公司
科技与互联网哪个更好
南山科技园互联网公司有哪些
宝灵互联网科技有限公司
开一家科技互联网公司需要多少钱
2021互联网科技公司排名
电子商务与互联网科技的关系
亚光科技低轨卫星互联网
宁波允成互联网科技有限公司
互联网科技股
互联网科技产业
港股互联网科技股
安徽鑫晟辉互联网科技
米客互联网科技
蓝色互联网科技
互联网科技公司的市场部门
花神(南京)互联网科技有限公司
城市宝互联网科技有限公司
上海乐五互联网科技有限公司