优化:mysql查询最近一条记录
下策——查询出结果后将时间排序后取第一条
select * from a
where create_time<="2017-03-29 19:30:36"
order by create_time desc
limit
- 这样做虽然可以取出当前时间最近的一条记录,但是一次查询需要将表遍历一遍,对于百万以上数据查询将比较费时;
- 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 =
order by create_time desc
limit
中策:
select * from ( select * from base_assets_turn
where ASSETS_ID =
order by create_time desc) tt GROUP BY tt.ASSETS_ID;
上策:
那么上策该如何书写呢,欢迎留言
by: 一只阿木木
优化:mysql查询最近一条记录的更多相关文章
- 关于mysql查询最近一条记录
关于mysql查询最近一条记录 最近项目中遇到需要查询记录当前时间最近的一条记录的问题,开始感觉无从下手,后来逐步发现了三种解决方案. 下策——查询出结果后将时间排序后取第一条 select * fr ...
- [mysql] 查询前几条记录
From: http://www.cnblogs.com/xuxm2007/archive/2010/11/16/1878211.html SELECT * FROM table LI ...
- MySQL查询上一条记录和下一条记录
如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...
- mysql 查询随机一条记录
项目中 需要查询热门帖子,查询结果是多条中一条:SQL 如下,记录下
- mysql查询前几条记录
#My SQL 取前多少条select * from table LIMIT 5,10; #返回第6-15行数据 select * from table LIMIT 5; #返回前5行 select ...
- 各数据库查询前N条记录的SQL语句
sql在不同数据库查询前几条数据 1. ORACLE SELECT * FROM TABLE_NAME WHERE ROWNUM <= N; HQL: from table_name t or ...
- 各个数据库中,查询前n条记录的方法
SQL查询前10条的方法为: 1.select top X * from table_name --查询前X条记录,可以改成需要的数字,比如前10条. 2.select top X * from ...
- php实现只保留mysql中最新1000条记录
这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- mysql查询随机几条数据(速度快)
MySql查询随机几条数据 想到了 Max RAND 这几个函数 用以下2种办法都可以实现查询. 速度还行. 几十万数据左右, 没有什么问题. SELECT * FROM `news` WHERE i ...
随机推荐
- 解决XMind运行卡顿
问题 XMind是一款很好用的脑图工具,它是基于eclipse开发的,而且基础功能是免费的.最近我安装了XMind 8 Pro,但是发现在Mac上运行有卡顿. 解决方式 解决这个问题的思路也很简单,软 ...
- 【转载】Linux Cache Mechanism Summary(undone)
http://www.cnblogs.com/LittleHann/p/3904909.html 目录 1. 缓存机制简介 2. 内核缓存机制 3. 内存缓存机制 4. 文件缓存机制 5. 数据库缓存 ...
- jjava Date格式是 May 07 17:44:06 CST 2018,怎么插入数据库中的timestamp格式中
首先 我来记录下错误 死在时间格式转换错误手里了 大致就是时间格式转化失败 java代码中的May 07 17:44:06 CST 2018 是这个格式转换为 数据库的 yyyy-MM-dd HH: ...
- 前端开发APP,从HBuilder开始~ 【转】
内容简介 介绍目前前端人员开发app的几种方法,具体介绍hbuilder开发app,一扇赞新的大门~ 无所不能的js 最开始js仅仅局限于网页上一些效果,操作网页内容等, 但是nodejs把js带入了 ...
- 解决AES算法CBC模式加密字符串后再解密出现乱码问题
问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...
- 3、js无缝滚动轮播
另一个无缝滚动轮播,带暂停,由于js是异步,用C面向过程的思想开始会很怪异很怪异,因为当你定时器里面需要执行的函数时间比较长或是有一段延时时,异步的代码会完全不同,但习惯就好了. 这个代码有几个问题, ...
- jsp 增删改查
使用Idea创建项目 1.新建web application项目 Idea 选择 Java Enterprise -> web application 2.新版本没有web-inf文件夹 解决方 ...
- IT连创业系列:近期功能调整(小魔术功能从二级目录调整到一级栏目)
最近花了点时间,折腾了一下.NET Core,因此有几篇 Taurus.MVC + CYQ.Data 的文章出来. 这两天也顺带把 ASP.NET Aries 升级了一下功能, 也计划支持.NET C ...
- echarts--迁徙图特性简介
$(function() { loadMapData(); //页面加载时调用封装加载echarts地图的函数});function loadMapData (cityName) { if ...
- PAT1116: Come on! Let's C
1116. Come on! Let's C (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue &quo ...