关于limit在后面为什么会慢的问题

      大家都用过mysql分页,实现一般是select * from talbe_name limit pageSize*(pageNo-1),pageSize

这条语句前面几页很快,为什么会随着pageNo增大而导致变慢呢?

 

原理是因为limit分页它会把pageSize*(pageNo-1)以前的记录也标记出来。这句话说得可能不是很容易理解。举个简单的例子,邮局的信件可能按地区分放在不同的架上子,这就相当于数据库的索引,你能很容易的找到哪些信件是西湖区的,并且每个架子上的信按收信时间排好序的。但是现在有个需求是要你找到西湖区里面信件在15号到20号的第10封到15封。你的做法我想应该首先找到西湖区所有的架子,这个很快你就能定位的,然后现在你怎么定位15号呢,如果架上有标记号数[时间索引]你也可以很轻松的找到。但是接下来呢?你怎么定位第10封呢,你会从15号开始找,看第一封是15号的,是第一个符号条件但是不是要我找的,恩,记下数,2,3,4,5,6,直到10,现在是我需要的了,拿出来,一直拿到第15封。问题就在这里,如果我要是需要找出第10000封至10010封呢,你得把前面都找一遍。所以到后面就会很慢了。

 

那要怎么解决呢,只要让前面的无用功少做一点儿就可以了。比如把上面的条件换成我要找18号12点到18号13点的不就少做很多无用功了吗?当然怎么把:找出第10000封至10010封这个需求转成找18号12点到18号13点跟你的业务场景有关了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值