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

作者:一只阿木木 时间:2024-01-17 02:33:57 

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


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语句(优化篇),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言!

来源:https://www.cnblogs.com/yizhiamumu/p/9090193.html

标签:mysql,查询,记录
0
投稿

猜你喜欢

  • Go结合反射将结构体转换成Excel的过程详解

    2024-05-05 09:26:49
  • 教你如何升级SQL Server数据库系统

    2009-01-19 14:42:00
  • GO语言入门Golang进入HelloWorld

    2024-05-09 09:32:12
  • SQL语句中LEFT JOIN的ON和WHERE有什么区别

    2024-01-21 04:33:00
  • Mysql事务特性和级别原理解析

    2024-01-25 11:00:04
  • 几种设置表单元素中文本输入框不可编辑的方法总结

    2024-04-18 09:34:14
  • Python免登录实现域名解析的示例详解

    2022-12-17 21:26:50
  • python函数参数*args**kwargs用法实例

    2021-03-25 14:19:41
  • IDA Pro 6.0使用Qt框架实现了跨平台的UI界面

    2022-12-05 05:07:55
  • Django 权限认证(根据不同的用户,设置不同的显示和访问权限)

    2023-09-18 04:07:30
  • exe反编译为.py文件的方法

    2022-06-10 16:18:16
  • ipython jupyter notebook中显示图像和数学公式实例

    2022-06-20 12:19:37
  • Puppeteer环境搭建的详细步骤

    2024-05-13 09:58:56
  • Python 多线程抓取图片效率对比

    2021-12-08 10:10:48
  • python 实现检验33品种数据是否是正态分布

    2022-09-25 19:57:55
  • 对MySQL慢查询日志进行分析的基本教程

    2024-01-22 20:32:35
  • django如何根据现有数据库表生成model详解

    2024-01-17 02:29:21
  • Vue2.0在IE11版本浏览器中的兼容性问题

    2024-04-29 13:08:55
  • python读取大文件越来越慢的原因与解决

    2022-07-23 08:35:28
  • 基于Python实现的购物商城管理系统

    2021-08-27 15:06:43
  • asp之家 网络编程 m.aspxhome.com