如题,我前两天去参加 MongoDB 用户组交流会时,听讲师说到数据量大的话不要使用 skip 和 limit
因为,这样会一行一行的数到想到的页数再取 PageSize 的数量。当然他们也提了另外一个方法,但是只略讲了一句。
我在这里提问是想知道具体怎么做?求思路。
大家讲道理2017-04-24 09:12:31
"다음 페이지" 또는 "이전 페이지"를 가져오려면 특정 _id보다 큰 sort+limit를 쿼리하면 됩니다.
"페이지 xxx"를 얻으려면 완전히 정확하고 싶다면 실제로는 좋은 방법이 없습니다. 페이징 자체는 "하나씩 계산" 논리이므로 시간이 많이 걸리는 프로세스는 여부에 관계없이 피할 수 없습니다. 인덱스가 있습니다.
페이지 수가 매우 많으면 수천만 이후의 숫자에 관심을 두는 사람은 많지 않습니다. redis를 사용하여 페이지 번호별로 _id 목록을 캐시하고 가끔씩 업데이트할 수 있습니다.
이 문제의 근본적인 요점은 "지수가 의존하는 b+ 구조는 순위 계산에 사용할 수 없습니다."입니다.