转自: https://blog.csdn.net/tsxw24/article/details/44994835
我经常使用order by和limit来做数据分页显示并排序,一直也没发现过什么问题。但这两天缺遇到一个严重的问题,在按时间戳升序排列并用limit分批读取数据时,却发现在某些记录丢失了,表中明明有的记录确死活读取不到。研究了大半天终于发现了问题所在,记录一下以防忘记,也是给大家提个醒。
问题重现
工具和原料
数据库:
Ver 14.14 Distrib 5.6.11, for Linux (x86_64) using EditLine wrapper
表结构:
字段
类型
说明
id
int(10)
主键
pay_time
int(10)
时间戳,有索引
flag
tinyint(1)
类型标识,用于分类筛选
数据
大概5000条数据, 大部分记录的flag都等于0,pay_time字段时间戳格式都正确
需求
筛选出flag=0的记录,按pay_time升序依次读取所有数据。
处理方式
使用limit分批读取数据,如:
select id, pay_time from order_customer_new where flag=0 order by pay_time asc, id asc limit 250, 10;
发现问题
在读取数据的过程中,发现有