主页 > 知识库 > Mysql查询最近一条记录的sql语句(优化篇)

Mysql查询最近一条记录的sql语句(优化篇)

热门标签:地图标注赚钱真假 遵义地图标注app 商家地图标注哪个好 深圳 陕西400电话如何申请 德惠市地图标注 外呼系统从哪买 合肥营销外呼系统收费 承德电脑地图标注

下策——查询出结果后将时间排序后取第一条

select * from a 
where create_time="2017-03-29 19:30:36" 
order by create_time desc
limit 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 a
where 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 = 254
order by create_time desc
limit 1

中策:

select * from ( select * from base_assets_turn 
where ASSETS_ID = 254
order by create_time desc) tt GROUP BY tt.ASSETS_ID;

上策:

那么上策该如何书写呢,欢迎留言!

以上所述是小编给大家带来的Mysql查询最近一条记录的sql语句(优化篇),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!

您可能感兴趣的文章:
  • 对MySql经常使用语句的全面总结(必看篇)
  • Mysql常用sql语句汇总
  • MySQL 使用DQL命令查询数据的实现方法
  • 整理MySql常用查询语句(23种)
  • Mysql学习之数据库检索语句DQL大全小白篇

标签:三门峡 巴中 南阳 新余 扬州 赣州 贵州 商丘

巨人网络通讯声明:本文标题《Mysql查询最近一条记录的sql语句(优化篇)》,本文关键词  Mysql,查询,最近,一条,记录,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Mysql查询最近一条记录的sql语句(优化篇)》相关的同类信息!
  • 本页收集关于Mysql查询最近一条记录的sql语句(优化篇)的相关信息资讯供网民参考!
  • 推荐文章