MongoDB中資料量大的話,不建議使用 skip 和 limit,那其它方式怎麼實作?
迷茫
迷茫 2017-04-24 09:10:31
0
2
628
  1. 如題,我前兩天去參加 MongoDB 使用者團體交流會時,聽講師說到資料量大的話不要使用 skip 和 limit
    因為,這樣會一行一行的數到想到的頁數再取 PageSize 的數量。當然他們也提了另一個方法,但只略講了一句。

    我在這裡提問是想知道具體怎麼做?求思路。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
大家讲道理

如果你是想取“下一頁”或“上一頁”,可以透過查詢大於某個_id的sort+limit來實現。
如果你是想取“第xxx頁”,如果想要完全精確,其實沒有多好的辦法,分頁本身是“挨個數”的邏輯,有沒有索引都避免不了這個耗時的過程。
在分頁數非常大的情況下,排在幾千萬之後的數字並沒有多少人關心,你可以使用redis做頁數對_id列表的緩存,每隔一段時間更新一次。
這個問題的根本點在於:「索引所依賴的b+結構不能用於排名計算」。

Ty80

記錄上次查詢的最後一個_id, 下次查詢{_id: {$gt: last_id}}

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板