mysql分页(MySQL的三种分页方式)
一、MYSQL中LIMIT用法
LIMIT是MySQL内置函数,其作用是用于限制查询结果的条数。
1)其语法格式如下:
LIMIT[位置偏移量,]行数
其中,中括号里面的参数是可选参数,位置偏移量是指MySQL查询分析器要从哪一行开始显示,索引值从0开始,即第一条记录位置偏移量是0,第二条记录的位置偏移量是1,依此类推...,第二个参数为“行数”即指示返回的记录条数。
位置偏移量可以理解为跳过前xx条记录(元组).
2)基本用法
/*当没有指定位置偏移量时,只取4条时,可以这样写*/
SELECT*FROMYourTableNameLIMIT4;
/*当指定了位置偏移量时,从第3条起取4条时,可以这样写*/
/*因为索引是从0开始计数的,所以第3条对应的索引就是2*/
SELECT*FROMYourTableNameLIMIT2,4;
3)应用场合:分页
//后台计算出页码、页数(页大小)
intcurPage=2;
intpageSize=10;
intstartRow=(curPage-1)*pageSize;
SELECT*FROMYourTableNameLIMITstartRow,pageSize;
二、mysql 数据量大的表如何做分页查询
直接用limit start, count分页语句,也是我程序中用的方法:
select* from product limit start, count
当起始页较小时,查询没有性能问题,我们分别看下从10, 100, 1000, 10000开始分页的执行时间(每页取20条),如下:
select* from product limit 10, 20 0.016秒
select* from product limit 100, 20 0.016秒
select* from product limit 1000, 20 0.047秒
select* from product limit 10000, 20 0.094秒
我们已经看出随着起始记录的增加,时间也随着增大,这说明分页语句limit跟起始页码是有很大关系的,那么我们把起始记录改为40w看下(也就是记录的一般左右) select* from product limit 400000, 20 3.229秒
再看我们取最后一页记录的时间
select* from product limit 866613, 20 37.44秒
难怪搜索引擎抓取我们页面的时候经常会报超时,像这种分页最大的页码页显然这种时
间是无法忍受的。
从中我们也能总结出两件事情:
1)limit语句的查询时间与起始记录的位置成正比
2)mysql的limit语句是很方便,但是对记录很多的表并不适合直接使用。
三、MySQL分页的sql语言怎么写
1、首先我们建立一个表表的数据,这个表里有25条数据,id从1到25。(下图是部分截图)
2、要分页数据,首先我们假设一页有10条数据,我们可以用mysql的 limit关键字来限定返回多少条数据。并且用order by来排序数据,这里用 id来排序。所以第一页的sql可以如图这样写。
3、执行后得到的数据如图,就是 id从1到10的前10条数据,因为我们是按id升序来排序的。
4、上面第一页的sql是简化的写法,完整的写法如图,得到的结果和上图的一模一样。代码里 limit 0, 10的意思是从第一条数据开始,取10条数据。(注意的是第一条数据是从0开始的)
5、那么第二页的数据,关键是要知道是从哪一条数据开始,可以用这个公式得到:(页码-1)*每页显示多少条,即(2-1)* 10= 10,所以sql语句如图, limit 10, 10。
6、执行后,结果正确,得到id从11到20的10条数据。
7、同理第三页数据的sql如图,<br/>就是 limit 20, 10。
8、查询的结果如图,因为这页只剩下5条数据了,所以只显示5条数据。如果你有更多页的数据,后面的数据只需要按上面的公式,得到从哪行开始,就可以写对应的sql语句了。