MySQL分页查询效率

MySQL分页查询

mysql的分页查询需要用到关键字 limit ,limit其实是mysql给的一个函数,就像是count(*)求和一样的函数,可以传入参数使用。

LIMIT 可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1)

使用limit进行分页查询

第一种情况,只传一个参数:
SELECT * FROM 表 LIMIT 2
该结果返回前两条数据。

第二种情况 也就是我们分页的sql实现
SELECT * FROM 表 LIMIT 2,10
查询第1条到第10条的数据的sql是:select * from table limit 0,10; ->对应我们的需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

查询第10条到第20条的数据的sql是:select * from table limit 10,20; ->对应我们的需求就是查询第二页的数据:select * from table limit (2-1)*10,10;

查询第20条到第30条的数据的sql是:select * from table limit 20,30; ->对应我们的需求就是查询第三页的数据:select * from table limit (3-1)*10,10;
所以我们可以清楚的得到
*分页sql格 select * from table limit (page-1)pageSize,pageSize; 其中page是页码,pageSize是每页显示的条数。

使用limit的效率问题

如果你仅仅知道limit,分页就使用limit确实很简单,但是面对大量数据的时候要对sql进行优化,提高查询效率,比如下面的sql的执行
select * from 表 limit 10000,10;
扫描前面10010行,返回最后10行,我懵了,前面查的1万行就直接不用

在数据量级到一定程度,limit方法会让查询变的没有效率。也就是说,分页越往后,查询到饿速度越慢。
我们要提高效率可以使用子查询

一般我们表种都有主键id,以下你可以自己去验证。
select * from 表 where id = 1 limit 200000 ,20;
select id from 表 where id = 1 limit 200000 ,20;

第二个只查询id肯定比第一个查询所有字段的效率要高,这个我们都应该知道。

利用第二种查询id的方法,进行优化limit的语句。
SELECT * FROM 表 WHERE ID > =(select id from xxx limit 1000000, 1) limit 20;
SELECT * FROM 表 a JOIN (select id from 表 limit 1000000, 20) b ON a.ID = b.id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangguan96

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值