>  기사  >  데이터 베이스  >  关于limit在后面为什么会慢的问题_MySQL

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

WBOY
WBOY원래의
2016-06-01 13:36:291269검색

bitsCN.com

关于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点跟你的业务场景有关了。

 

bitsCN.com
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.