Mysql查询最近一条记录的sql语句(优化篇)
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,下策--查询出结果后将时间排序后取第一条select * from a where create_time<="2017-03-29 19:30:36" order by create_time de
千家信息网最后更新 2025年01月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安全错误
数据库的锁怎样保障安全
云服务器小鸟
163邮箱服务器所在地
合肥网络技术培训班
计算机 网络安全顾问
服务器运行内存是多少规格
数据库多表去重
学习软件开发需要什么工具
请检查服务器配置信息
实况8联机对战是哪个服务器
诊断dns服务器未响应
曲洲老师网络安全手抄报简单漂亮
大数据内存数据库
杭州杭州软件开发要学些什么
哪里的云服务器包月便宜
湖南棋牌游戏软件开发公司哪家好
重点岗位网络安全自查报告
湖南兴趣少儿编程软件开发
东丽区企业网络技术售后服务
北京岂凡网络技术有限公司
信息技术网络安全培训班
数据库技术BI
关于软件开发方面的证书
mysq改数据库密码 语句
mysql 跨服务器
pb链接excel数据库
美国国土网络安全
九阴真经新服务器
易鲸捷数据库使用
全新网络安全
网络安全法对地方政府有关