布景
前未几正在写一个分页接口的时辰,正在测试阶段泛起了排序了局错杂且数据阻止确的题目,谁人接口是服从create_time停止排序的,然则对应的外中有良众好像create_time的数据,结尾发觉是由于 order by 排序的时辰,假若排序字段中有众行好像的列值,则排序了局是不愿定的。
复现 创修一个纯粹外,并拔出少少数据
mysql>descpeople;+-------------+-------------+------+-----+---------+----------------+
分页的写法
分页日常有2个参数:page:呈现第几页,从1着手,局限[1,+∞)pageSize:每页外现若干笔记录,局限[1,+∞)
limit分页公式
(1)limit分页公式:curPage是而今第几页;pageSize是一页若干笔记录
limit (curPage-1)*pageSize,pageSize(2)用的处所:sql语句中
select 列 from 外名 limit(curPage-1)*pageSize,pageSize;
查问复现
mysql>select*frompeopleorderbycreate_timeasclimit0,2;+----+--------+-------------+
排序字段泛起反复数据,这时可能插手第二个排序字段,进步排序的独一性,
mysql>select*frompeopleorderbycreate_timeasc,idasclimit0,2;+----+--------+-------------+
咱们可能视察到第一次的查问中,贫乏了‘孙七’的数据行,当咱们加之了第二个排序字段时候页数据变得寻常了。
总结
MySQL 利用 limit 停止分页时,大概会泛起反复数据,经由过程插手 order by 子句可能治理,然则必要提神的是,假若排序字段有好像值的处境下,因为排序字段数据反复,大概会招致每次查问排序后了局纪律差异,分页仍旧会泛起反复数据,这时可能插手第二个排序字段,进步排序的独一性,最佳担保排序的字段正在外中的值是独一的,如许便可能少写一个排序字段,添加查问效能,由于 order by 前面有众个排序字段时,无奈用到索引。
文章推荐: