您好,登錄后才能下訂單哦!
TODO:數(shù)據(jù)庫優(yōu)化之分頁
本文的例子是以MongoDB數(shù)據(jù)庫為準,其它數(shù)據(jù)庫各位也可以舉一反三進行優(yōu)化。
在MongoDB中分頁使用
a.skip(n)跳過前n個匹配的文檔;
b.limit(m)返回m個結(jié)果,要是匹配的結(jié)果不到m個,則返回匹配數(shù)據(jù)量的結(jié)果,m是指定上限數(shù)量,而不是下限數(shù)量;
c.sort({“name”: 1,”address”:-1}),1表示升序,-1表示降序。
使用skip跳過少量的文檔還可以。但是數(shù)據(jù)量非常多的話,skip就會變得非常慢,每個數(shù)據(jù)庫都會有這種情況,所以要盡量避免過多的使用skip。那要怎么做分頁,我們可以利用上次的結(jié)果來計算下次的查詢。
1.使用skip的分頁
Page1 = db.user.find({}).limit(100)
Page2 = db.user.find({}).skip(100).limit(100)
Page3 = db.user.find({}).skip(200).limit(100)
2.利用上次的結(jié)果來計算下次的查詢,按時間戳(timestamp)排序
獲取第一頁
Page1 = db.user.find({}).sort({“timestamp”: -1}).limit(10)
獲取當前頁面的最后一條記錄的時間戳lasttimestamp,
根據(jù)lasttimestamp進行查詢下一頁數(shù)據(jù)
Nextpage=db.user.find({“timestamp”:{“$gt”:lasttimestamp}}).sort({“timestamp”: -1}).limit(10)
這樣查詢就沒有使用到skip,但是要確保timestamp唯一約束確保文檔中的數(shù)據(jù)沒有相同的值。
wxgzh:ludong86
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。