亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mongodb索引的優(yōu)化

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

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

一、索引簡(jiǎn)介

例如如下數(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)建方向.若索引只有一個(gè)鍵,則方向無關(guān)緊要.

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

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

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

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

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

cursor:返回游標(biāo)類型(BasicCursor或BtreeCursor)
nscanned:被掃描的文檔數(shù)量
n:返回的文檔數(shù)量
millis:耗時(shí)(毫秒)
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才會(huì)輸出慢語句到profile。有兩個(gè)參數(shù)來控制profile的輸出
db.setProfilingLevel(level,slowms);

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

比如

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

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

profile輸出的各項(xiàng)值的含義是

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

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

比如

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

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

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

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

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

首先,它會(huì)給查詢做一個(gè)初步的“最佳索引”;

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

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

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

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

1. 等值測(cè)試

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

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

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

3. 范圍過濾

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

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

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

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

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

相關(guān)文章

  • mongodb數(shù)據(jù)庫入門之CURD簡(jiǎn)單操作示例

    mongodb數(shù)據(jù)庫入門之CURD簡(jiǎn)單操作示例

    這篇文章主要介紹了mongodb數(shù)據(jù)庫入門之CURD簡(jiǎn)單操作,結(jié)合簡(jiǎn)單示例形式分析了MongoDB數(shù)據(jù)庫基本的CURD增刪改查相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • db.serverStatus()命名執(zhí)行時(shí)報(bào)無權(quán)限問題的解決方法

    db.serverStatus()命名執(zhí)行時(shí)報(bào)無權(quán)限問題的解決方法

    這篇文章主要給大家介紹了關(guān)于db.serverStatus()命名執(zhí)行時(shí)報(bào)無權(quán)限問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • MongoDB的聚合框架Aggregation Framework入門學(xué)習(xí)教程

    MongoDB的聚合框架Aggregation Framework入門學(xué)習(xí)教程

    MongoDB中的聚合aggregate主要用于處理數(shù)據(jù)計(jì)算,這里我們就來詳細(xì)整理MongoDB的聚合框架Aggregation Framework入門學(xué)習(xí)教程,需要的朋友可以參考下
    2016-07-07
  • mongoDB使用投影剔除‘額外’字段的操作過程

    mongoDB使用投影剔除‘額外’字段的操作過程

    這篇文章主要給大家介紹了關(guān)于mongoDB使用投影剔除‘額外’字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • mongos崩潰后無法重啟問題的解決方法

    mongos崩潰后無法重啟問題的解決方法

    這篇文章主要給大家介紹了關(guān)于mongos崩潰后無法重啟問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MongoDB系列教程(八):GridFS存儲(chǔ)詳解

    MongoDB系列教程(八):GridFS存儲(chǔ)詳解

    這篇文章主要介紹了MongoDB系列教程(八):GridFS存儲(chǔ)詳解,本文講解了什么是GridFS、GridFS的實(shí)現(xiàn)原理等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • MongoDB可視化工具mongodb-compass

    MongoDB可視化工具mongodb-compass

    這篇文章介紹了MongoDB的可視化工具mongodb-compass,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 使用命令方式安裝MongoDB指南(Windows、Linux)

    使用命令方式安裝MongoDB指南(Windows、Linux)

    這篇文章主要介紹了使用命令方式安裝MongoDB指南,本文分別介紹Windows、Linux下使用命令的方式安裝mongodb,需要的朋友可以參考下
    2015-04-04
  • MongoDB中實(shí)現(xiàn)多表聯(lián)查的實(shí)例教程

    MongoDB中實(shí)現(xiàn)多表聯(lián)查的實(shí)例教程

    數(shù)據(jù)庫應(yīng)用在我們的生活中是很常見的,在編輯一些應(yīng)用以及軟件的時(shí)候都需要用到數(shù)據(jù)庫來存儲(chǔ)數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MongoDB中實(shí)現(xiàn)多表聯(lián)查的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • MongoDB 常用命令總結(jié)

    MongoDB 常用命令總結(jié)

    Mongo最大的特點(diǎn)是他支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。Mongo還可以解決海量數(shù)據(jù)的查詢效率,當(dāng)數(shù)據(jù)量達(dá)到50GB以上時(shí),Mongo數(shù)據(jù)庫訪問速度是MySQL10 倍以上
    2015-05-05

最新評(píng)論