Mysql查询最近一条记录的sql语句(优化篇)
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,下策--查询出结果后将时间排序后取第一条select * from a where create_time<="2017-03-29 19:30:36" order by create_time de
千家信息网最后更新 2024年11月22日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安全错误
数据库的锁怎样保障安全
服务器联网的点歌机改单机
天津仿真软件开发招聘信息
blob从rtmp服务器拉流
燃烧的远征新手玩哪个服务器
浙江服务器机柜哪里批发
网络安全法最新修订
进入游戏服务器连接失败
软件开发高级工程师笔试题
小学网络安全知识教育计划
台湾华艺数据库主页
数据库报表页脚不显示
空间地理数据库标准定义
中国工业企业数据库包含哪些变量
网络安全法工商执法权
弱电工程服务器销售中心
vf是哪种类型的数据库
精英网络技术开发哪家好
台州易巨网络技术有限公司
数据库 pdf下载
暗盾网络安全论坛
合肥服务器机柜批发
数据库 bi
广电工程中网络技术的应用论文
vc 上位机软件开发教程
各银行软件开发中心招聘条件
网络安全计算机培训机构
涿州天气预报软件开发
糖尿病软件开发
上位机应用软件开发
使用数据库 用到什么技术