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

Mongodb索引的優(yōu)化

 更新時間:2016年02月26日 10:03:27   投稿:mrr  
MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。接下來通過本文給大家介紹Mongodb索引的優(yōu)化,本文介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧

MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。MongoDB索引幾乎和關(guān)系型數(shù)據(jù)庫的索引一樣.MongoDB的查詢優(yōu)化器能夠使用這種數(shù)據(jù)結(jié)構(gòu)來快速的對集合(collection)中的文檔(collection)進(jìn)行尋找和排序.準(zhǔn)確來說,這些索引是通過B-Tree索引來實現(xiàn)的。在命令行中,可以通過調(diào)用ensureIndex()函數(shù)來建立索引,該函數(shù)指定一個到多個需要索引的字段,下面介紹mongodb索引如何優(yōu)化

一、索引簡介

例如如下數(shù)據(jù)

db.refactor.insert({"username":"refactor","age":24,"isactive":true})
db.refactor.insert({"username":"refactor","age":30,"isactive":false})
db.refactor.insert({"username":"aaaaa","age":24,"isactive":false})
db.refactor.insert({"username":"aaaaa","age":34,"isactive":true})
db.refactor.insert({"username":"sssssss","age":24,"isactive":true})
db.refactor.insert({"username":"tttttt","age":24,"isactive":true})
db.refactor.insert({"username":"tttttt","age":54,"isactive":true})
db.refactor.insert({"username":"bbbbb","age":24,"isactive":false})
db.refactor.insert({"username":"rrrrr","age":24,"isactive":true})
db.refactor.insert({"username":"rrrrr","age":54,"isactive":false})

要按照username鍵進(jìn)行查找,就可以在此鍵上建立索引,來提高查詢速度.

db.refactor.ensureIndex({"username":1})

要按照username,age鍵進(jìn)行查找,就可以在此鍵上建立索引,來提高查詢速度.

db.refactor.ensureIndex({"age":1,"username":1})

傳遞給ensureIndex的文檔是一組值為1或-1的鍵,1為升序,-1為降序,表示索引的創(chuàng)建方向.若索引只有一個鍵,則方向無關(guān)緊要.

若是有多個鍵,就得考慮索引的方向問題了.

二、mongodb自帶的就有監(jiān)控,根據(jù)這些監(jiān)控信息,可以做為優(yōu)化的依據(jù)

1、explain執(zhí)行計劃

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

幾個關(guān)鍵的字段說明

cursor:返回游標(biāo)類型(BasicCursor或BtreeCursor)
nscanned:被掃描的文檔數(shù)量
n:返回的文檔數(shù)量
millis:耗時(毫秒)
indexBounds:所使用的索引

例如

SQL 代碼

>db.order.ensureIndex({"user.uid":1})

>db.order.find({ "status": 1.0, "user.uid": { $gt: 2663199.0 } }).explain() 
{ 
"cursor" : "BtreeCursor user.uid_1", 
"nscanned" : 337800, 
"nscannedObjects" : 337800, 
"n" : 337800, 
"millis" : 1371, 
"nYields" : 0, 
"nChunkSkips" : 0, 
"isMultiKey" : false, 
"indexOnly" : false, 
"indexBounds" : { 
"user.uid" : [ 
[ 
2663199, 
1.7976931348623157e+308 
] 
] 
} 
}

2、優(yōu)化器profile

在MySQL中慢查詢?nèi)罩臼墙?jīng)常作為我們優(yōu)化數(shù)據(jù)庫的依據(jù)那在MongoDB中是否有類似的功能呢?答案是肯定的那就是MongoDBDatabaseProfiler。所以MongoDB不僅有而且還有一些比MySQL的SlowQueryLog更詳細(xì)的信息。
mongodb把要輸出的慢語句,存在于db.system.profile。與mysql的slowlog配置相似,需要進(jìn)行參數(shù)設(shè)置,mongo才會輸出慢語句到profile。有兩個參數(shù)來控制profile的輸出
db.setProfilingLevel(level,slowms);

默認(rèn)為0 不輸出 1按第二個參數(shù)時間閥值(單位為毫秒)輸出 2全部輸出。通常我們在調(diào)優(yōu)的時候都在測試環(huán)境打開參數(shù)。在生產(chǎn)環(huán)境下一般不輸出profile。

比如

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

就可以輸出,查詢時間大于1秒的慢語句。

profile輸出的各項值的含義是

ts:命令執(zhí)行時間
info:命令的內(nèi)容
query:代表查詢
order.order: 代表查詢的庫與集合
reslen:返回的結(jié)果集大小,byte數(shù)
nscanned:掃描記錄數(shù)量
nquery:后面是查詢條件
nreturned:返回記錄數(shù)及用時
millis:所花時間

如果發(fā)現(xiàn)時間比較長,那么就需要作優(yōu)化。

比如

(1)、nscanned數(shù)很大,或者接近記錄總數(shù),那么可能沒有用到索引查詢。

(2)、reslen很大,有可能返回沒必要的字段。

(3)、nreturned很大,那么有可能查詢的時候沒有加限制。

三、MongoDB的索引選擇機(jī)制

MongoDB的優(yōu)化程序會在對比中選擇更優(yōu)秀的索引。

首先,它會給查詢做一個初步的“最佳索引”;

其次,假如這個最佳索引不存在它會做嘗試來選出表現(xiàn)最好的索引;

最后,優(yōu)化器還會記住所有類似查詢的選擇(只到大規(guī)模文件變動或者索引上的變動)。

那么優(yōu)化器是如何定義查詢的“最佳索引”。最佳索引必須包含查詢中所有可以做過濾及需要排序的字段。此外任何用于范圍掃描的字段以及排序字段都必須排在做等值查詢的字段之后。如果存在不同的最佳索引,那么Mongo將隨機(jī)選擇。

四、MongoDB的索引總結(jié)

1. 等值測試

索引中加入所有需要做等值測試的字段,任意順序。

2. 排序字段(多排序字段的升/降序問題 )

根據(jù)查詢的順序有序的向索引中添加字段。

3. 范圍過濾

以字段的基數(shù)(Collection中字段的不同值的數(shù)量)從低到高的向索引中添加范圍過濾字段。

4、如果索引中的等值或者范圍查詢字段不能過濾出Collection中90%以上的文檔,那么把它移除索引估計會更好一些。

5、索引使得可以通過關(guān)鍵字段獲取數(shù)據(jù),能夠使得快速查詢和更新數(shù)據(jù)。但是,必須注意的是,索引也會在插入和刪除的時候增加一些系統(tǒng)的負(fù)擔(dān)。往集合中插入數(shù)據(jù)的時候,索引的字段必須加入到B-Tree中去,因此,索引適合建立在讀遠(yuǎn)多于寫的數(shù)據(jù)集上,對于寫入頻繁的集合,在某些情況下,索引反而有副作用。不過大多數(shù)集合都是讀頻繁的集合,所以集合在大多數(shù)情況下是有用的。

6、如果數(shù)據(jù)集合比較小(通常小于4M),使用sort()而不需要建立索引就能夠返回數(shù)據(jù)。在這種情況下,做好聯(lián)合使用limit()和sort()。

關(guān)于Mongodb索引的優(yōu)化就給大家介紹這么多,希望對大家有所幫助!

相關(guān)文章

  • MongoDB索引類型匯總分享

    MongoDB索引類型匯總分享

    這篇文章主要介紹了MongoDB索引類型匯總,單字段索引、復(fù)合索引、多鍵索引、文本索引、2dsphere索引等多種索引類型,需要的朋友可以參考一下
    2022-04-04
  • Mongodb?刪除集合數(shù)據(jù)后釋放磁盤空間的操作步驟

    Mongodb?刪除集合數(shù)據(jù)后釋放磁盤空間的操作步驟

    Mongodb當(dāng)集合數(shù)據(jù)占用比較多,對其進(jìn)行清理后,集合存儲空間下降,但磁盤空間并沒釋放,對于具有活動更新的集合來說,有一些可重用的空間是正常的,過多的可重用空間通常是刪除大量數(shù)據(jù)的結(jié)果,這篇文章主要介紹了Mongodb?刪除集合數(shù)據(jù)后如何釋放磁盤空間,需要的朋友可以參考下
    2023-11-11
  • mongodb權(quán)限設(shè)置之添加管理員、普通用戶的方法

    mongodb權(quán)限設(shè)置之添加管理員、普通用戶的方法

    這篇文章主要介紹了mongodb添加管理員、普通用戶的方法,同時介紹了mongodb開啟權(quán)限認(rèn)證后PHP客戶端的兩種連接方法,需要的朋友可以參考下
    2014-06-06
  • MongoDB 中Limit與Skip的使用方法詳解

    MongoDB 中Limit與Skip的使用方法詳解

    這篇文章主要介紹了MongoDB 中Limit與Skip的使用方法詳解的相關(guān)資料,這里對這兩種方法進(jìn)行了詳細(xì)介紹并附示例代碼,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下
    2017-07-07
  • Mongodb如何開啟用戶訪問控制詳解

    Mongodb如何開啟用戶訪問控制詳解

    默認(rèn)啟動 MongoDB 服務(wù)時沒有任何參數(shù),可以對數(shù)據(jù)庫任意操 作,而且可以遠(yuǎn)程訪問數(shù)據(jù)庫,所以推薦開發(fā)階段可以不設(shè)置任何參數(shù),但對于生產(chǎn)環(huán)境還是要仔細(xì)考慮一下安全方面的因素,下面就介紹了Mongodb開啟用戶訪問控制的相關(guān)資料。
    2017-01-01
  • 淺談MongoDB的備份方式

    淺談MongoDB的備份方式

    mongodb數(shù)據(jù)庫同樣離不開必要的維護(hù),如備份、恢復(fù)、導(dǎo)入、導(dǎo)出。其實備份和恢復(fù)比導(dǎo)入和導(dǎo)出要方便些,而且一般不會出錯,所以大部分時候使用備份和恢復(fù)操作就可以了。下面我們來簡單談?wù)凪ongoDB的備份方式
    2015-05-05
  • Mongodb 數(shù)據(jù)類型及Mongoose常用CURD

    Mongodb 數(shù)據(jù)類型及Mongoose常用CURD

    MongoDB 是一個開源的 NoSQL 數(shù)據(jù)庫,相比 MySQL 那樣的關(guān)系型數(shù)據(jù)庫,它更為輕巧、靈活,非常適合在數(shù)據(jù)規(guī)模很大、事務(wù)性不強(qiáng)的場合下使用,本文給大家介紹Mongodb 數(shù)據(jù)類型及Mongoose常用CURD,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • MongoDB服務(wù)端JavaScript腳本使用方法

    MongoDB服務(wù)端JavaScript腳本使用方法

    這篇文章主要介紹了MongoDB服務(wù)端JavaScript腳本使用方法,需要的朋友可以參考下
    2015-10-10
  • MongoDB中4種日志的詳細(xì)介紹

    MongoDB中4種日志的詳細(xì)介紹

    這篇文章主要給大家介紹了關(guān)于MongoDB中4種日志的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • MongoDB學(xué)習(xí)筆記之分組(group)使用示例

    MongoDB學(xué)習(xí)筆記之分組(group)使用示例

    這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之分組(group)使用示例,本文直接給出一組測試數(shù)據(jù),然后練習(xí)分組的基本使用,需要的朋友可以參考下
    2015-07-07

最新評論

内黄县| 宽甸| 重庆市| 绥中县| 蓬溪县| 南宫市| 长汀县| 奉节县| 维西| 饶河县| 五莲县| 商丘市| 东安县| 绥阳县| 临沧市| 冀州市| 门源| 平泉县| 黄龙县| 乌苏市| 禄劝| 洪雅县| 曲阜市| 辽阳市| 镇安县| 耒阳市| 林口县| 清涧县| 广德县| 饶阳县| 长顺县| 呼玛县| 萨嘎县| 竹山县| 金溪县| 大同县| 上高县| 定日县| 德兴市| 特克斯县| 本溪市|