TODO:數(shù)據(jù)庫(kù)優(yōu)化之分頁(yè)
在英山等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷(xiāo)推廣,成都外貿(mào)網(wǎng)站建設(shè),英山網(wǎng)站建設(shè)費(fèi)用合理。
本文的例子是以MongoDB數(shù)據(jù)庫(kù)為準(zhǔn),其它數(shù)據(jù)庫(kù)各位也可以舉一反三進(jìn)行優(yōu)化。
在MongoDB中分頁(yè)使用
a.skip(n)跳過(guò)前n個(gè)匹配的文檔;
b.limit(m)返回m個(gè)結(jié)果,要是匹配的結(jié)果不到m個(gè),則返回匹配數(shù)據(jù)量的結(jié)果,m是指定上限數(shù)量,而不是下限數(shù)量;
c.sort({“name”: 1,”address”:-1}),1表示升序,-1表示降序。
使用skip跳過(guò)少量的文檔還可以。但是數(shù)據(jù)量非常多的話,skip就會(huì)變得非常慢,每個(gè)數(shù)據(jù)庫(kù)都會(huì)有這種情況,所以要盡量避免過(guò)多的使用skip。那要怎么做分頁(yè),我們可以利用上次的結(jié)果來(lái)計(jì)算下次的查詢(xún)。
1.使用skip的分頁(yè)
Page1 = db.user.find({}).limit(100)
Page2 = db.user.find({}).skip(100).limit(100)
Page3 = db.user.find({}).skip(200).limit(100)
2.利用上次的結(jié)果來(lái)計(jì)算下次的查詢(xún),按時(shí)間戳(timestamp)排序
獲取第一頁(yè)
Page1 = db.user.find({}).sort({“timestamp”: -1}).limit(10)
獲取當(dāng)前頁(yè)面的最后一條記錄的時(shí)間戳lasttimestamp,
根據(jù)lasttimestamp進(jìn)行查詢(xún)下一頁(yè)數(shù)據(jù)
Nextpage=db.user.find({“timestamp”:{“$gt”:lasttimestamp}}).sort({“timestamp”: -1}).limit(10)
這樣查詢(xún)就沒(méi)有使用到skip,但是要確保timestamp唯一約束確保文檔中的數(shù)據(jù)沒(méi)有相同的值。
wxgzh:ludong86