Mysql分页查询丢失数据

canca4年前 (2020-09-28)MySQL589

问题场景描述

将一个sql的查询结果集导出为文件,由于一次查询结果集可能上百万条,在开发环境和测试环境均造成了内存溢出的问题。因此改为分页查询数据的方式,虽然慢点,但是规避了内存溢出的问题。
但是,在这一百多万条导出的数据中,发现导出的文件中的数据与数据库直接查询出的数据不一致。偶发性的部分数据缺失,部分数据有重复,但是总条数一致。

问题分析

最早怀疑是程序问题,但是最后发现程序没问题,然后就把目光聚焦到了一直以为没问题的sql上面。由于我的查询sql最后是用时间来排序的,也就是:order by create_date desc。刚开始,我认为通过时间排序了,已经能保证数据的顺序。但是,当我用了其他几个字段和事件一起做排序,保证每次查询结果集的顺序强一致性,就没有发生过数据丢失或数据重复的问题。

结论

在使用limit进行分页时,一定要保证当前每次查询结果集的顺序一致性。不然可能会出现分页数据顺序不一致,导致分页查询的结果集和期望的结果集不一致。


相关文章

mysql 配置命令大全

--auto-rehash       Enable automatic rehashing. One doesn't need to use  &n...

mysql 外鍵約束

1. 什么是参照完整性?——————–参照完整性(完整性约束)是数据库设计中的一个重要概念,当数据库中的一个表与一个或多个表进行关联时都会涉及到参照完整性。比如下面这个例子:文章分类表 - ...

MySql导入SQL文件

MySql导入SQL文件: mysql -u root -p <c:\sampledb.sql...

MySQl字段类型

MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概...

解决PHP存取MySQL 4.1乱码问题

从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过...

MySQL备份与恢复语句

mysql备份语句:E:\MySQL Server 5.0\bin>mysqldump -uroot -padmin --default-character-set=utf8 --opt --e...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。