mysql排序不稳定,分页查询数据有重复和遗漏
2017-07-19 15:59
531 查看
现象:业务方在系统添加用户时,提示 用户A已经存在,但是界面中没有。
解决过程:数据库中看得到。
查看sql语句,在线上sql工具查询,但是不支持分页,不方便复现问题。
select * from user where yn = 1 order by roleType 是有的。
那为啥 select * from user where yn =1 order by roleType limit 0,10;
数据就出现问题呢?
看了很久,也没有发现问题。
本地数据量太少,又懒,没有把线上用户数据导入到本地测试表。
把sql发给了dba,帮忙分析了下。
很可能的原因:roleType不是主键,多个用户的 角色可能是一致的。最终mysql分页时,取数据 不稳定。
这里有个奇怪的问题,在线上和本地,单独执行不带limit语句的查询结果是稳定的。
难道只有在limit分页的时候,才会不稳定?
解决办法是,增加id desc 第2个排序条件。
当roltType相同的时候,再按照 id 降序,确保顺序是唯一的。
------------------------------------------------------------------------
第1页和第2页存在重复的用户,还漏掉了部分用户。
第1次遇到。
平时看sql,感觉也没啥。
遇到了问题,猛然一惊"还有这种操作"。
解决过程:数据库中看得到。
查看sql语句,在线上sql工具查询,但是不支持分页,不方便复现问题。
select * from user where yn = 1 order by roleType 是有的。
那为啥 select * from user where yn =1 order by roleType limit 0,10;
数据就出现问题呢?
看了很久,也没有发现问题。
本地数据量太少,又懒,没有把线上用户数据导入到本地测试表。
把sql发给了dba,帮忙分析了下。
很可能的原因:roleType不是主键,多个用户的 角色可能是一致的。最终mysql分页时,取数据 不稳定。
这里有个奇怪的问题,在线上和本地,单独执行不带limit语句的查询结果是稳定的。
难道只有在limit分页的时候,才会不稳定?
解决办法是,增加id desc 第2个排序条件。
当roltType相同的时候,再按照 id 降序,确保顺序是唯一的。
------------------------------------------------------------------------
第1页和第2页存在重复的用户,还漏掉了部分用户。
第1次遇到。
平时看sql,感觉也没啥。
遇到了问题,猛然一惊"还有这种操作"。
相关文章推荐
- oracle分页查询数据重复问题、分页排序陷阱
- mysql分页加排序数据重复问题解决方案
- Oracle分页查询排序数据重复问题
- MySQL在分页查询中出现数据重复
- mysql优化----大数据下的分页,延迟关联,索引与排序的关系,重复索引与冗余索引,索引碎片与维护
- MYSQL根据热门条件进行排序分页,防止分页有重复数据
- mysql 5.6 order by limit 排序分页数据重复问题
- mysql中排序再分页 数据重复
- mysql 5.6 order by limit 排序分页数据重复问题
- mysql中排序再分页遇到的重复数据
- MySQL:MySQL处理千万级数据查询、分页
- mysql查询不重复数据
- mysql 怎么实现随机查询并分页,不重复查询
- Mybatis+mysql动态分页查询数据案例——分页工具类(Page.java)
- Oracle、MySql、SQLServer 数据分页查询
- Oracle分页查询排序数据重复问题
- 关于MYSQL通过子查询删除重复数据的for update报错问题解决
- Oracle、MySql、SQLServer 数据分页查询
- mysql分页出现重复数据-order by
- SpringMVC+Mybatis实现的Mysql分页数据查询的示例