根据时间排序分页查询导致部分数据丢失原因

场景:

根据时间排序分页查询交易记录表时,查总数没问题,但是从一页到下一页的时候,在每页分隔的地方可能会出现记录部分丢失。

分析:

SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC
LIMIT 1,20

如果数据库存入时间最低单位到秒,那么在交易多的时候表中会出现多笔在同一时间生成的订单,当以时间排序时,数据库难以判断时间先后,当这种无法分辨的记录出现在两页分隔的地段,在分页时可能会导致某一/几笔订单被“隐藏”的现象,在显示记录的时候就看不到了。

解决:

1、第一种解决办法,当然存入数据库的时间字段以毫秒数为最小单位可极大可能避免这种情况。

2、当某一时刻交易量极大的时候,甚至出现毫秒数都一样的订单也是可能的,这时可以用另一个字段来辅助排序,如自增长的id,绝不会重复,且按记录进入数据表增大的。

SELECT id, orderNo, addTime
FROM deal_tab
ORDER BY addTime DESC, id
LIMIT 1,20

你可能感兴趣的:(实战问题解决)