搜尋

首頁  >  問答  >  主體

MongoDB中資料量大的話,不建議使用 skip 和 limit,那其它方式怎麼實作?

  1. 如題,我前兩天去參加 MongoDB 使用者團體交流會時,聽講師說到資料量大的話不要使用 skip 和 limit
    因為,這樣會一行一行的數到想到的頁數再取 PageSize 的數量。當然他們也提了另一個方法,但只略講了一句。

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

迷茫迷茫2804 天前646

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-04-24 09:12:31

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

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-24 09:12:31

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

    回覆
    0
  • 取消回覆