关于mysql查询最近一条记录

最近项目中遇到需要查询记录当前时间最近的一条记录的问题,开始感觉无从下手,后来逐步发现了三种解决方案。

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

select * from a

where time<="2017-03-29 19:30:36"

order by time desc

limit 1

这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时;limit是先取出全部结果,然后取第一条,相当于查询中占用了不必要的时间和空间;还有如果需要批量取出最近一条记录,比方说:“一个订单表,有用户,订单时间,金额,需要一次性查询所有用户的最近的一条订单记录”,那么每个用户一次查询就要做一次整表的遍历,数据大的情况下,时间将会以指数形式增长,不能投入实际使用。

中策——查询排序后group by

select * from (

select * from a

where time<="2017-03-29 19:30:36"

order by time desc

) group by user_id

后来发现使用group by 可以根据group by 的参数列分组,但返回的结果只有一条,仔细观察发现group by是将分组后的第一条记录返回。时间在查询后默认是顺序排列,因此需要先将时间倒序排列,方可取出距离当前最近一条。

这样查询实际上还是进行了两次查询,虽然时间上相比第一个方法有了质的飞跃,但是还可以进一步优化。

上策——将max() 方法和group by结合使用

select *,max(time) from a

where time<="2017-03-29 19:30:36"

group by user_id

这句可以理解为将结果集根据user_id分组,每组取time最大一条记录。这样就很好的实现了批量查询最近记录,并且仅仅需要遍历一次表,即使在数据量巨大的情况下也可以在很短的时间查出结果。

from:https://www.cnblogs.com/wwyz/p/6641895.html

mysql 查找最近一条记录_关于mysql查询最近一条记录相关推荐

  1. 怎样查看电脑系统版本_用什么软件查维修记录 思域HATCHBACK怎样查询维保记录_汽车事故车查询...

    请点击上方快速关注 思域HATCHBACK很火.这款被誉为"国产Type R"的思域HATCHBACK版本在三厢车的基础上,集成了更运动化乃至更具战斗感的套件包围.中置排气和手动变 ...

  2. mysql中标记某条数据库_一个关系数据库表中的各条记录可以什么

    一个关系数据库表中的各条记录前后顺序可以任意颠倒,不影响数据库中数据的实际意义.一个关系数据库的表中有多条记录,记录之间的前后顺序并不会对库中的数据关系产生影响,所以行的顺序是无所谓的,可以任意颠倒. ...

  3. 如何给mysql表添加百万条数据_给mysql一百万条数据的表添加索引

    直接alter table add index 添加索引,执行一个小时没反应,并且会导致锁表:故放弃该办法,最终解决办法如下: 一.打开mysql 命令行客户端 这里我们那可以看到导出的数据文件所存放 ...

  4. mysql日期维表sql文件_《MySQL必知必会》笔记(SQL练习+建表语句)

    站在巨人的肩上 Standing On Shoulders Of Giants 部分转自:https://www.jianshu.com/p/294502893128 https://blog.csd ...

  5. mysql id自动递增两个_浅析Mysql索引数据结构演变,让你一看就懂

    前言 相信小伙伴应该都用到过mysql数据库,在mysql数据库中,为了提升查询效率,都会使用到索引技术.今天老顾就来介绍一下mysql索引的数据结构的演变. 数据查询 我们来看一下有个用户表,存放这 ...

  6. mysql使用索引扫描做排序_「Mysql索引原理(八)」使用索引扫描做排序

    MySQL有两种方式可以生成有序的结果:通过排序操作:或者按索引顺序扫描:如果explain出来的type列的值为index,则说明MySQL使用了索引扫描来做排序. 扫描索引本身是很快的,因为只需要 ...

  7. mysql技术innodb存储引擎读后感_《Mysql技术内幕-InnoDB存储引擎》读书笔记 (一)...

    @(Mysql) 官方数据库 下载 导入/data/mysql57/bin/mysql --socket /data/mysql3306/mysql.socket -uroot -ppassword1 ...

  8. mysql第五章项目二_高性能MySQL笔记 第5章 创建高性能的索引

    索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段. 5.1 索引基础 索引的类型 索引是在存储引擎层而不是服务器层 ...

  9. mysql数据库是一个软件呐_【MySQL数据库软件、SQL】

    内容 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓库. ...

最新文章

  1. ns3入门案例1 first.cc
  2. python中的常量可以修改吗_深入理解Python变量与常量
  3. java 课后习题 Vector类的 初使用
  4. 展望 | 2020年人工智能八大趋势
  5. Gradient Descent(机器学习之梯度下降法)
  6. 2.3.14 Python 函数进阶-生成器
  7. 视频标签- video 音频标签- audio
  8. js call和apply方法小结
  9. php smarty配置,PHP中使用Smarty模板目录结构配置
  10. cesium 经纬度绘制点_Cesium搜索经纬度并标点
  11. 系统学习语义分割文章推荐以及顺序
  12. 19. shift,shift n,位置变量,命令行参数控制,shift语法,用法示例
  13. python使用selenium进行浏览器中途调试的方法
  14. tomcat无法响应请求,假死
  15. 写论文有哪些神网站?
  16. ZZNUOJ_C语言1088:手机短号 (多实例)(完整代码)
  17. (批处理学习)句柄备份——个人见解之“>nul 3>nul“——记录学习过程(详细)
  18. Vue搭建可视化界面
  19. mysql建表及DML语句
  20. 东营汽车音响改装哪里好?汽车音响调音秘决

热门文章

  1. Canvas画圆形刻度表
  2. zookeeper的zab协议工作原理
  3. oracle表关联为什么不走索引,Oracle执行计划不走索引的原因总结
  4. 将图片嵌入Markdown文档
  5. 超级课程表显示服务器错误,超级课程表怎么注册?超级课程表注册不了怎么办?...
  6. RT-Thread嵌入式操作系统
  7. java毕设开源啦,springboot+bootstrap库存管理系统
  8. python中文字体下载_Python在Matplotlib图中显示中文字体的操作方法
  9. php网页分类的修改,php网站分类目录 网站收录 网址导航程序 织梦二次开发
  10. 2021数维杯全网最全:背景下的港口资源配置优化策略