如題,我前兩天去參加 MongoDB 使用者團體交流會時,聽講師說到資料量大的話不要使用 skip 和 limit
因為,這樣會一行一行的數到想到的頁數再取 PageSize 的數量。當然他們也提了另一個方法,但只略講了一句。
我在這裡提問是想知道具體怎麼做?求思路。
大家讲道理2017-04-24 09:12:31
如果你是想取“下一頁”或“上一頁”,可以透過查詢大於某個_id的sort+limit來實現。
如果你是想取“第xxx頁”,如果想要完全精確,其實沒有多好的辦法,分頁本身是“挨個數”的邏輯,有沒有索引都避免不了這個耗時的過程。
在分頁數非常大的情況下,排在幾千萬之後的數字並沒有多少人關心,你可以使用redis做頁數對_id列表的緩存,每隔一段時間更新一次。
這個問題的根本點在於:「索引所依賴的b+結構不能用於排名計算」。