mysql数据库分页?mysql 数据量大的表如何做分页查询
大家好,如果您还对mysql数据库分页不太了解,没有关系,今天就由本站为大家分享mysql数据库分页的知识,包括mysql 数据量大的表如何做分页查询的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
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怎样实现分页查询
mysql分页查询的方法:
简述
通常在MySQL中通过limit#{limit},#{offset}来进行分页查询。
当表中记录较多且页数(#{limit})较大时,分页查询效率变慢。
变慢的原因时,分页查询时,会先查询出limit+ offset条记录,然后截取后面的offset记录。
本文以实际1.4亿的表big_table为例,记录如何优化分页查询。
测试说明
测试表:big_table,数据量:1.4亿。
原始SQL(4500ms)
--原始分页查询,耗时:4500ms
select*
from big_table
limit 2000000,10;慢的原因:
1、查询条件为*
2、limit= 2000000太大
优化一(推荐):用具体字段代替*(1600ms)
--用明确字段代替*,耗时:1600ms
select id,uid,media_id,media_name,news_id,comment
from big_table
limit 2000000,10;优化二:先查寻索引(450ms)
--方法1:先对索引进行分页查询,耗时:450ms
select* from big_table AS h inner join
(select id from big_table
limit 2000000,10) AS ss
on h.id= ss.id;
--方法2:先查询出起始位置的索引,耗时:450ms
select* from big_table
where id>(
select id from big_table limit 2000000,1
)
limit 10;优化三:between? and(5ms)
限制:id必须是连续递增的。
--上一页保留最后一条记录所在id,耗时:5ms
select* from big_table
where id between 4882489 and 4882489+ 10;优化四(推荐):保留上一页记录所在id(5ms)
限制:需要保留上一页的最后一条记录所在id
--上一页需要保留最后一条记录所在id,耗时:5ms
select* from big_table
where id> 4882488
limit 10;更多相关免费学习推荐:mysql教程(视频)
MySQL如何实现分页查询
MySQL中实现分页查询:在数据量较小的情况下可使用limit查询来实现分页查询,在数据量大的情况下使用建立主键或唯一索引来实现,另外可通过order by对其排序
在后端项目中总是避免不了admin管理,当后台管理需要展示数据时就会需要用到分页,接下来在文中中将为大家分享的时MySQL如何实现分页查询,具有一定的参考作用,希望对大家有所帮助。
【推荐课程:MySQL教程】
一般情况下在MySQL中进行分页查询时,会用到limit查询,而且在查询中都会使用到order by来进行排序。接下来将具体介绍MySQL是如何实现分页查询的
分页需求:
客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,MySql数据库提供分页的函数有limit m,n,但是该函数的用法和我们的需求不一样,所以就需要根据实际情况去改写适合自己的分页语句。例
查询第1条到第10条的数据的sql是:
select* from table limit 0,10;对应我们的需求就是查询第一页的数据:
select* from table limit(1-1)*10,10;从上面的分析我们可以得出分页sql的格式是:
select* from table limit(start-1)*limit,limit;其中start是页码,limit是每页显示的条数。
建立主键或者唯一索引
在数据量较小的时候使用 limit进行数据分页在性能上面不会有明显的缓慢,但是当数据量达到了万级或百万级时,sql语句的性能将会影响数据的返回。这是就要使用主键或者是唯一索引来代替limit进行数据分页
例:返回10到50之间的数据
设主键或唯一索引为demo_id
select* from table where demo_id>(pageNo-1)*pageSize limit pageSize;基于数据再排序
当需要返回的信息要按顺序或者逆序时,就需要对上面的数据进行排序。可用order by ASC表示顺序,order byDESC表示逆序,一般情况下默认的为顺序
例:返回的数据依照demo_id的顺序进行排列
select* from table where demo_id>(pageNo-1)*pageSize order by demo_id limit pageSize;总结:
结合MySQL数据库,如何实现分页功能
第一步:我们可以利用$_GET方法获取某一个参数的值,在用户点击上一页、下一页、首页或者末页时获取不同的动态参数
第二步:根据MySQL的limit关键字,对动态参数进行SQL语句拼接
将定义每页显示的数据条数,在limit第一个参数的位置中,根据地址栏参数的动态变化从而实现指定从第几条数据开始显示数据
文章分享结束,mysql数据库分页和mysql 数据量大的表如何做分页查询的答案你都知道了吗?欢迎再次光临本站哦!