如何优雅地实现分页查询
作者:互联网
可以看到数据总行数大概45000条。
基于limit实现分页是比较简单的:
mysql> select * from user order by id asc limit 10000,10;
+-------+------------+
| id | name |
+-------+------------+
| 10000 | user_10000 |
| 10001 | user_10001 |
| 10002 | user_10002 |
| 10003 | user_10003 |
| 10004 | user_10004 |
| 10005 | user_10005 |
| 10006 | user_10006 |
| 10007 | user_10007 |
| 10008 | user_10008 |
| 10009 | user_10009 |
+-------+------------+
10 rows in set
其中,limit后面的第一个参数表示下标,也就是从第10000行记录开始取,第二个参数表示总共取10行记录
mysql> select * from user where id >=10010
order by id asc limit 10;
+-------+------------+
| id | name |
+-------+------------+
| 10010 | user_10010 |
| 10011 | user_10011 |
| 10012 | user_10012 |
| 10013 | user_10013 |
| 10014 | user_10014 |
| 10015 | user_10015 |
| 10016 | user_10016 |
| 10017 | user_10017 |
| 10018 | user_10018 |
| 10019 | user_10019 |
+-------+------------+
10 rows in set
可以看到,当在相邻的两页查询之间插入数据时,分页查询结果不会出现重复。其实也很好理解,因为虽然插入记录后,分页的结构变了,但是由于我们现在的分页查询是从固定的id开始查的,所以插入新的数据对后面的分页结果没有影响。
当然,这种分页查询也是有限制的。其只适用于用来排序的列具有唯一性的情况,在上述例子中,id列是主键,所以具有唯一性,故可以使用这种方式分页。如果用来排序的列不具有唯一性,比如说是时间戳,那么这种分页方式也可能出现重复,大家可以想想是为什么。
搜索
复制
<iframe></iframe>标签:10,分页,查询,limit,user,优雅,id,+-------+------------+ 来源: https://www.cnblogs.com/XiaoYeH/p/16371588.html