常用的电子商务网站开发技术,爱辉网站建设,俄语网站模板,服装定制属于什么行业这里写目录标题 问题描述#xff1a;问题模拟#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述#xff1a;
在mysql8查询中使用ORDER BY结合LIMIT时#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。
问题模拟#xff1a; 表table_lock_test问题模拟原因分析问题解释问题解决验证官方文档支持 问题描述
在mysql8查询中使用ORDER BY结合LIMIT时分页查询时出现后一页的数据重复前一页的部分数据。
问题模拟 表table_lock_test忽视表名中的字段及数据如下 表中总共14条数据其中11条数据的version列的值是相同的 使用ORDER BY结合LIMIT进行分页查询查询第1、2页:(每页显示7条),进行对比
SELECT * FROM table_lock_test ORDER BY version DESC LIMIT 7;SELECT * FROM table_lock_test ORDER BY version DESC LIMIT 7,7;对比结果如下
原因分析
看如下两个查询 根据version列排序查询前10条数据 根据version列排序查询前5条数据 根据以上对比可大胆猜测ORDER BY与LIMIT结合使用时如果被排序ORDER BY的列的值相同那么它们的查询结果的顺序可能不固定。
问题解释
当查询第2页数据时id为14 (- HJUIO- 4)的数据的顺序并不在第3的位置而是出现在了第11的位置作为第2页的数据再返回了 这时结合第1页的查询数据就出现了1条重复数据 同时必然会出现重复多少条就会有多少数据凭空消失结合上面的对比图可知这里消失的是id 为 8 的数据。
问题解决
如果排序ORDER BY列有相同的值的时候再添加一个索引 INDEX列如主键列一起排序就不会出现上面的数据重复、数据消失的问题了
验证
使用ORDER BY结合LIMIT进行分页查询查询第1、2页:(每页显示7条),进行对比, 排序时增加INDEX列这里增加id
SELECT * FROM table_lock_test ORDER BY version DESC,id LIMIT 7;SELECT * FROM table_lock_test ORDER BY version DESC,id LIMIT 7,7;对比结果如下
官方文档支持
Msql8操作手册-mysql-refman-8.0-en 第8章-8.2.1.19