普通分页
数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start
select * from user limit 1,20
这种分页在几十万的时候分页效率就会比较低了,MySQL需要从头开始一直往后计算,这样大大影响效率
SELECT * from user limit 100001,20; //time 0.151s
explain SELECT * from user limit 100001,20;
我们可以用e
从一个问题说起
五年前在腾讯的时候,发现分页场景下,mysql请求速度非常慢。数据量只有10w的情况下,select xx from 单机大概2,3秒。
我就问我师父为什么,他反问“索引场景,mysql中获得第n大的数,时间复杂度是多少?”
答案的追寻
确认场景
假设status上面有索引。select * from table where status = xx limit 10 offset 10000。
会非常慢。数据量不大的情况就有几秒延迟。
小白作答
那时候非常有安全感,有啥事
数据分页,在开发中必不可少,由于数据量太大,不得不进行处理。但是对于分页,又有很多种方式,比如使用sql语句的limit,或者使用jquery的插件。但是底层的逻辑,都是需要的。
在这里贴出bean对象的代码,以及一个辅助类。我做的这个项目是一个个人博客,算是个人网站吧。
(只贴部分底层逻辑代码)
Page.java
package cn.edu.ldu.util;
public class Page {
private int everyPage; //每页显示的数量
pr