MongoDB學習系列 -- 分頁查詢用法
阿新 • • 發佈:2018-12-24
查詢分頁幾乎是所有資料庫的訴求,既然資料庫分為關係型和非關係型兩大類,那關於分頁查詢的方法也根據資料庫分類的不同而不同。雖然具體用法是不同的,但核心思想確是一樣的:skip某些記錄select某些記錄。
下面先分別舉例SqlServer以及Mysql 兩種關係型資料庫中分頁查詢的用法。
1、SqlServer
--公式化 設要查詢第n頁,頁大小為p
select top p * from 表名
where 主鍵 not in
(select top (n-1)*p 主鍵 from表名
)
2、Mysql
select A,B,C from table where filed = cond order by field desc(asc) limit num1,num2;
關於Mysql的分頁查詢方式比較直觀理解:limit即從第多少條記錄開始,取多少條記錄。詳細用法請參考:分頁查詢優化
關於oracle資料庫本人在工作中未曾使用過,詳細用法可以參考:分頁查詢優化
OK,上面說的都是關係型資料庫,接下來我們來學習一下非關係型資料庫MongoDB分頁查詢的使用。
MongoDB不像關係型資料庫有sql語言,MongoDB中只有各種api(不知道這樣稱呼是否準確),想要實現查詢分頁功能也只能依賴於這些方法實現,具體就是skip、sort、limit,OK,下面我們就來了解一下這幾個方法的使用。
> db.ydm.find() { "_id" : ObjectId("5b4056fcd3c72e6c8d190cf9"), "name" : "xiaoming", "sex" : 0 } { "_id" : ObjectId("5b40578ad3c72e6c8d190cfa"), "phone" : "131**" } { "_id" : ObjectId("5b4057ccd3c72e6c8d190cfb"), "phone" : "152**" } { "_id" : ObjectId("5b4057dbd3c72e6c8d190cfc"), "phone" : "183**" } { "_id" : ObjectId("5b589a716b94352ae8e97780"), "phone" : "131**" } > db.ydm.find().limit(2).skip(3).sort({'sex':1}) { "_id" : ObjectId("5b4057dbd3c72e6c8d190cfc"), "phone" : "183**" } { "_id" : ObjectId("5b4056fcd3c72e6c8d190cf9"), "name" : "xiaoming", "sex" : 0 }
注意:
(1)最好是在sort的欄位上建立索引,防止資料記憶體在記憶體中排序,資料量較大時對效能影響很大。
(2)skip limit sort三者的先後順序是無關的,可以隨意,為了便於理解,建議按照skip limit sort的順序操作。
(3)不建議一次skip大量資料,對效能會由影響。