在所查询的数据结果集没变化的前提下,每次select的顺序是不变的吗?

譬如下面语句

select * from table where update_time >='2019-11-23' and update_time < '2019-11-25'

由于返回结果有几千条,所以想要分页

for in in (0,n) :
select * from table where update_time >='2019-11-23' and update_time < '2019-11-25' limit i*500, (i+1)*500-1

但是担心几次select结果顺序不一样导致不同分页查询之间会有交集
在所查询的数据结果集没变化的前提下,每次select的顺序是不变的吗?
另外,分页,每页大小一般设置多大为好(不是呈现在页面上,而是用来做后台计算)?

阅读 2.8k
3 个回答

既然担心select结果顺序会变,为啥不排下序 order by 一下。
分页的大小看你业务需求,如果是页面展示一般每页20-50这样就行。

顺便说下 limit i500, (i+1)500-1 你这个分页写的有问题啊,不能这么搞,limit 后面第一个参数是起始位置,第二个参数是往后查询的条数。改成 limit (i-1)*500 , 500;

建议增加order by 排序关键字
分页一般如果呈现到页面上的话是10-20条比较友好,

一般不考虑这个问题,虽然没有见过数据库引擎有关select语句结果次序是否稳定的说明,但我们都习惯假设两次查询次序不变,而且从来没出现过问题。

所以,一般来说select结果次序应该是不变的,但还是有order by比较可靠。

分页大小一般是最常用前端页面一个页能显示完的最大行数,现在前端的分页器一般都可以让用户选择分页大小,一般我们也不考虑这个问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题