关于SQL最大值查询语句的记录
2017-06-19 11:54
507 查看
这几天在项目上遇到一个问题,说是一个业务列表的查询很慢。记得之前这个功能并没有遇到这个情况,而且根据客户的描述,是最近一段时间开始变慢的。于是从后台拿出了不知道是谁写的sal语句,检查了一下,发现其中的一个子查询语句是这样的:
简单的看了一下这个语句,应该是想查出这个表中state值最大的业务对应的bsnum和state这两个字段的值。但是用原有的方法未免太麻烦,而且效率低下,于是优化了一下sql语句,改成这样的:
之前只是知道,用第一种这样的蠢蠢的查询方式,效率很低,但是没有想到二者差距这么大。为什么之前这里没有发现问题呢?因为一开始的时候数据量不是很大,所以倒是也没有太影响系统使用。不过随着数据量慢慢的变多,到现在已经有几十万条数据了,所以查询速度自然就变得慢下来了。
SELECT BSNUM, STATE AS FILE_STATE FROM file_record r WHERE EXISTS( SELECT BSNUM, STATE FROM ( SELECT BSNUM, MAX(STATE) AS STATE FROM file_record GROUP BY BSNUM ) x WHERE r.BSNUM = x.BSNUM AND r.STATE = x.STATE )
简单的看了一下这个语句,应该是想查出这个表中state值最大的业务对应的bsnum和state这两个字段的值。但是用原有的方法未免太麻烦,而且效率低下,于是优化了一下sql语句,改成这样的:
SELECT bsnum, STATE AS FILE_STATE FROM FILE_RECORD r WHERE STATE =( SELECT MAX(STATE) FROM FILE_RECORD WHERE bsnum = r.bsnum );将修改前后的两个语句在数据量大的生产环境分别执行一下,发现查询时间差距居然如此之大:
之前只是知道,用第一种这样的蠢蠢的查询方式,效率很低,但是没有想到二者差距这么大。为什么之前这里没有发现问题呢?因为一开始的时候数据量不是很大,所以倒是也没有太影响系统使用。不过随着数据量慢慢的变多,到现在已经有几十万条数据了,所以查询速度自然就变得慢下来了。
相关文章推荐
- 关于SQL语句查询最近联系人聊天记录(即最近一条消息)
- 关于所使用的spark版本中的spark sql不支持exists和in等子查询语句的解决方案记录
- 关于sql语句的limit与查询记录的下标
- SQL语句记录,查询今日某个活动签到是否正常
- 关于过去工作的一些总结:常用sql语句以及数据库查询优化
- hibernate中的query查询原生sql语句,如何获得返回记录中的每一个字段的值
- sql语句查询最大字段,如果表为空返回null异常
- Oracle:sql语句查询没有重复的记录数目
- [MS SQL]SQL语句查询每个分组的前N条记录的实现方法
- 记录一次条件比较多的SQL查询语句
- [VB.NET]用SQL查询得到(按编号分组的日期最大的记录)
- 常用sql语句之删除或查询单个字段重复数据的记录
- 数据库中使用SQL语句查询当天数据记录
- SQL设置SQLServer最大连接数查询语句
- 查询及删除重复记录的SQL语句
- 关于多条id相同,只取其中一条记录的sql语句
- 关于数据库中的简单SQL查询语句
- 【转】用标准的SQL语句实现查询记录分页
- 查询及删除重复记录的SQL语句
- 使用SQL语句查询表中重复记录并删除