SELECT * FROM table_name ORDER BY id ASC LIMIT 10 OFFSET 10
也就是用LIMIT和OFFSET来控制需要输出的内容区域,后来我在翻其他人代码时看到了这种写法
SELECT * FROM table_name WHERE id >10 ORDER BY id ASC LIMIT 10
这种写法是否比前一种写法的速度要更快,因我看到它使用id主键的索引,而且还把检索区域用id >10缩小了,理论上应该更快。但这种写法应该也有一定的局限性,比如最大的局限就是它只能用于那种类似timeline的,从第一页往后翻的应用场景,因为你要翻下一页必须知道前一页的最后偏移是多少。
不知道我这样的分析是否正确,各位有什么样的看法。
mysql有limit好像比较给力,分页也不是很难。public class PageInfo implements Serializable {
private static final long serialVersionUID = 1365747893051987016L
private int pageSize = 10// 每页显示10行,可自行调节
private int recordCount// 总行数
private int pageCount// 总页数
private int pageId// 当前页
private int startIndex// 当前页的开始行数
private int endIndex// 当前页的结束行数
private List items//当前页数据
public PageInfo() {
}
public int getPageSize() {
return pageSize
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize
}
public int getRecordCount() {
return recordCount
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount
}
public int getPageCount() {
return pageCount
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount
}
public int getPageId() {
return pageId
}
public void setPageId(int pageId) {
this.pageId = pageId
}
public int getStartIndex() {
return startIndex
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex
}
public int getEndIndex() {
return endIndex
}
public void setEndIndex(int endIndex) {
this.endIndex = endIndex
}
public List getItems() {
return items
}
public void setItems(List items) {
this.items = items
}
}
翻页直接对pageId(当前页)进行加减就可以了,有当前页开始行数,你直接
limit(startIndex-1)*pageSize,pageSize)就可以了
1、首先我们建立一个表表的数据,这个表里有25条数据,id从1到25。(下图是部分截图)
2、要分页数据,首先我们假设一页有10条数据,我们可以用mysql的limit关键字来限定返回多少条数据。并且用orderby来排序数据,这里用id来排序。所以第一页的sql可以如图这样写。
3、执行后得到的数据如图,就是id从1到10的前10条数据,因为我们是按id升序来排序的。
4、上面第一页的sql是简化的写法,完整的写法如图,得到的结果和上图的一模一样。代码里limit0,10的意思是从第一条数据开始,取10条数据。(注意的是第一条数据是从0开始的)
5、那么第二页的数据,关键是要知道是从哪一条数据开始,可以用这个公式得到:(页码-1) *每页显示多少条,即(2-1)*10=10,所以sql语句如图,limit10,10。
6、执行后,结果正确,得到id从11到20的10条数据。
7、同理第三页数据的sql如图,<br/>就是limit20,10。
8、查询的结果如图,因为这页只剩下5条数据了,所以只显示5条数据。如果你有更多页的数据,后面的数据只需要按上面的公式,得到从哪行开始,就可以写对应的sql语句了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)