最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃

 更新時(shí)間:2016年02月26日 10:16:41   投稿:mrr  
這篇文章主要介紹了MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃的相關(guān)資料,需要的朋友可以參考下

一、索引

MongoDB 提供了多樣性的索引支持,索引信息被保存在system.indexes 中,且默認(rèn)總是為_id創(chuàng)建索引,它的索引使用基本和MySQL 等關(guān)系型數(shù)據(jù)庫一樣。其實(shí)可以這樣說說,索引是凌駕于數(shù)據(jù)存儲(chǔ)系統(tǒng)之上的另一層系統(tǒng),所以各種結(jié)構(gòu)迥異的存儲(chǔ)都有相同或相似的索引實(shí)現(xiàn)及使用接口并不足為 奇。

1.基礎(chǔ)索引

在字段age 上創(chuàng)建索引,1(升序);-1(降序):

db.users.ensureIndex({age:1})

_id 是創(chuàng)建表的時(shí)候自動(dòng)創(chuàng)建的索引,此索引是不能夠刪除的。當(dāng)系統(tǒng)已有大量數(shù)據(jù)時(shí),創(chuàng)建索引就是個(gè)非常耗時(shí)的活,我們可以在后臺(tái)執(zhí)行,只需指定“backgroud:true”即可。

db.t3.ensureIndex({age:1} , {backgroud:true})

2.文檔索引

索引可以任何類型的字段,甚至文檔:

db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );
//在addr 列上創(chuàng)建索引
db.factories.ensureIndex( { addr : 1 } );
//下面這個(gè)查詢將會(huì)用到我們剛剛建立的索引
db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );
//但是下面這個(gè)查詢將不會(huì)用到索引,因?yàn)椴樵兊捻樞蚋饕⒌捻樞虿灰粯?
db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );

3. 組合索引

跟其它數(shù)據(jù)庫產(chǎn)品一樣,MongoDB 也是有組合索引的,下面我們將在addr.city 和addr.state上建立組合索引。當(dāng)創(chuàng)建組合索引時(shí),字段后面的1 表示升序,-1 表示降序,是用1 還是用-1 主要是跟排序的時(shí)候或指定范圍內(nèi)查詢 的時(shí)候有關(guān)的。

db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );
// 下面的查詢都用到了這個(gè)索引
db.factories.find( { "addr.city" : "Beijing", "addr.state" : "BJ" } );
db.factories.find( { "addr.city" : "Beijing" } );
db.factories.find().sort( { "addr.city" : 1, "addr.state" : 1 } );
db.factories.find().sort( { "addr.city" : 1 } )

4. 唯一索引

只需在ensureIndex 命令中指定”unique:true”即可創(chuàng)建唯一索引。例如,往表t4 中插入2 條記錄:

db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true});

5.強(qiáng)制使用索引

hint 命令可以強(qiáng)制使用某個(gè)索引。

db.t5.find({age:{$lt:30}}).hint({name:1, age:1}).explain()

6.刪除索引

//刪除t3 表中的所有索引
db.t3.dropIndexes()
//刪除t4 表中的firstname 索引
db.t4.dropIndex({firstname: 1})

二、explain執(zhí)行計(jì)劃

MongoDB 提供了一個(gè) explain 命令讓我們獲知系統(tǒng)如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統(tǒng)如何使用索引來加快檢索,同時(shí)可以針對性優(yōu)化索引。

db.t5.ensureIndex({name:1})
 db.t5.ensureIndex({age:1})
 db.t5.find({age:{$gt:45}}, {name:1}).explain()
 {
   "cursor" : "BtreeCursor age_1",
   "nscanned" : 0,
   "nscannedObjects" : 0,
   "n" : 0,
   "millis" : 0,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "isMultiKey" : false,
   "indexOnly" : false,
   "indexBounds" : {
   "age" : [
          [45,1.7976931348623157e+308]
        ]
    }
}

 字段說明:

cursor: 返回游標(biāo)類型(BasicCursor 或 BtreeCursor)

nscanned: 被掃描的文檔數(shù)量

n: 返回的文檔數(shù)量

millis: 耗時(shí)(毫秒)

indexBounds: 所使用的索引

三、優(yōu)化器profile

在MySQL 中,慢查詢?nèi)罩臼墙?jīng)常作為我們優(yōu)化數(shù)據(jù)庫的依據(jù),那在MongoDB 中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。

1.開啟profiling功能

有兩種方式可以控制 Profiling 的開關(guān)和級(jí)別,第一種是直接在啟動(dòng)參數(shù)里直接進(jìn)行設(shè)置。啟動(dòng)MongoDB 時(shí)加上–profile=級(jí)別 即可。也可以在客戶端調(diào)用db.setProfilingLevel(級(jí)別) 命令來實(shí)時(shí)配置,Profiler 信息保存在system.profile 中。我們可以通過db.getProfilingLevel()命令來獲取當(dāng)前的Profile 級(jí)別,類似如下操作:

db.setProfilingLevel(2);

上面profile 的級(jí)別可以取0,1,2 三個(gè)值,他們表示的意義如下:

0 – 不開啟

1 – 記錄慢命令 (默認(rèn)為>100ms)

2 – 記錄所有命令

Profile 記錄在級(jí)別1 時(shí)會(huì)記錄慢命令,那么這個(gè)慢的定義是什么?上面我們說到其默認(rèn)為100ms,當(dāng)然有默認(rèn)就有設(shè)置,其設(shè)置方法和級(jí)別一樣有兩種,一種是通過添加 –slowms 啟動(dòng)參數(shù)配置。第二種是調(diào)用db.setProfilingLevel 時(shí)加上第二個(gè)參數(shù):

db.setProfilingLevel( level , slowms )
db.setProfilingLevel( 1 , 10 );

2.查詢 Profiling 記錄

與MySQL 的慢查詢?nèi)罩静煌琈ongoDB Profile 記錄是直接存在系統(tǒng)db 里的,記錄位置system.profile ,所以,我們只要查詢這個(gè)Collection 的記錄就可以獲取到我們的 Profile 記錄了。列出執(zhí)行時(shí)間長于某一限度(5ms)的 Profile 記錄:

db.system.profile.find( { millis : { $gt : 5 } } )

MongoDB Shell 還提供了一個(gè)比較簡潔的命令show profile,可列出最近5 條執(zhí)行時(shí)間超過1ms 的 Profile 記錄。 

四、常用性能優(yōu)化方案

創(chuàng)建索引

限定返回結(jié)果數(shù)

只查詢使用到的字段

采用capped collection

采用Server Side Code Execution

使用Hint,強(qiáng)制使用索引

采用Profiling

五、性能監(jiān)控工具

1. mongosniff

此工具可以從底層監(jiān)控到底有哪些命令發(fā)送給了MongoDB 去執(zhí)行,從中就可以進(jìn)行分析:以root 身份執(zhí)行:

$./mongosniff --source NET lo

然后其會(huì)監(jiān)控位到本地以localhost 監(jiān)聽默認(rèn)27017 端口的MongoDB 的所有包請求。

2.Mongostat

此工具可以快速的查看某組運(yùn)行中的MongoDB 實(shí)例的統(tǒng)計(jì)信息 字段說明:

insert: 每秒插入量

query: 每秒查詢量

update: 每秒更新量

delete: 每秒刪除量

locked: 鎖定量

qr | qw: 客戶端查詢排隊(duì)長度(讀|寫)

ar | aw: 活躍客戶端量(讀|寫)

conn: 連接數(shù)

time: 當(dāng)前時(shí)間

它每秒鐘刷新一次狀態(tài)值,提供良好的可讀性,通過這些參數(shù)可以觀察到一個(gè)整體的性能情況。

3. db.serverStatus

這個(gè)命令是最常用也是最基礎(chǔ)的查看實(shí)例運(yùn)行狀態(tài)的命令之一。

4.db.stats

db.stats 查看數(shù)據(jù)庫狀態(tài)信息。

以上所述是小編給大家介紹的MongoDB性能篇之創(chuàng)建索引,組合索引,唯一索引,刪除索引和explain執(zhí)行計(jì)劃的相關(guān)知識(shí),希望對大家有所幫助!

相關(guān)文章

  • MongoDB條件操作符的具體使用

    MongoDB條件操作符的具體使用

    MongoDB的條件操作符主要分為比較操作符、邏輯操作符、元素操作符、數(shù)組操作符、文本搜索操作符等幾種類型,本文就詳細(xì)的介紹一下這幾種類型的操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • MongoDb優(yōu)化指南

    MongoDb優(yōu)化指南

    在大數(shù)據(jù)時(shí)代中,大數(shù)據(jù)量的處理已經(jīng)成了考量一個(gè)數(shù)據(jù)庫最重要的原因之一。這篇文章給大家分享MongoDb優(yōu)化指南,感興趣的朋友一起看看吧
    2018-11-11
  • MongoDB查詢性能優(yōu)化驗(yàn)證及驗(yàn)證

    MongoDB查詢性能優(yōu)化驗(yàn)證及驗(yàn)證

    這篇文章主要介紹了MongoDB查詢性能驗(yàn)證及優(yōu)化的相關(guān)知識(shí),涉及到MongoDB 查詢優(yōu)化原則知識(shí)點(diǎn),本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-02-02
  • SpringBoot整合MongoDB的實(shí)現(xiàn)步驟

    SpringBoot整合MongoDB的實(shí)現(xiàn)步驟

    MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。本文介紹SpringBoot項(xiàng)目如何整合MongoDB
    2021-06-06
  • 為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    這篇文章介紹了為MongoDB數(shù)據(jù)庫注冊windows服務(wù)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法

    MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法

    這篇文章主要介紹了MongoDB利用oplog恢復(fù)數(shù)據(jù)的方法,當(dāng)我們對數(shù)據(jù)出現(xiàn)誤操作的時(shí)候,可以利用oplog恢復(fù)數(shù)據(jù),下文操作過程需要的小伙伴可以參考一下
    2022-04-04
  • Mongodb安裝與配置筆記

    Mongodb安裝與配置筆記

    這篇文章主要介紹了Mongodb安裝與配置筆記,本文環(huán)境為Linux,講解了Mongodb安裝步驟、配置方法、服務(wù)啟動(dòng)、后臺(tái)運(yùn)行等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫

    Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫

    這篇文章介紹了Centos系統(tǒng)搭建MongoDB數(shù)據(jù)庫的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Mongodb使用索引進(jìn)行查詢優(yōu)化的操作方法

    Mongodb使用索引進(jìn)行查詢優(yōu)化的操作方法

    為集合建立合適的索引,能夠有效的減少查詢操作時(shí)掃描數(shù)據(jù)的數(shù)量 ,從而提高查詢效率,簡化了mongodb內(nèi)部查詢工作,這篇文章主要介紹了Mongodb使用索引進(jìn)行查詢優(yōu)化的操作方法,需要的朋友可以參考下
    2024-06-06
  • MongoDB 主分片(primary shard)相關(guān)總結(jié)

    MongoDB 主分片(primary shard)相關(guān)總結(jié)

    這篇文章主要介紹了MongoDB 主分片(primary shard)相關(guān)總結(jié)。幫助大家更好的理解和學(xué)習(xí)使用MongoDB,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論

霍州市| 呼玛县| 金乡县| 拉孜县| 北宁市| 虎林市| 苍山县| 福鼎市| 措勤县| 东阳市| 昔阳县| 石首市| 马尔康县| 延安市| 都昌县| 崇阳县| 沽源县| 将乐县| 丹寨县| 措美县| 龙江县| 博客| 凌源市| 河东区| 儋州市| 崇礼县| 巴林左旗| 阳春市| 什邡市| 三明市| 海林市| 苗栗县| 兰溪市| 封丘县| 龙州县| 内江市| 虎林市| 舞钢市| 寿阳县| 锦州市| 孝昌县|