亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

Mongodb索引的優化

2020-10-29 18:49:58
字體:
來源:轉載
供稿:網友

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

一、索引簡介

例如如下數據

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鍵進行查找,就可以在此鍵上建立索引,來提高查詢速度.

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

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

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

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

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

二、mongodb自帶的就有監控,根據這些監控信息,可以做為優化的依據

1、explain執行計劃

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

幾個關鍵的字段說明

cursor:返回游標類型(BasicCursor或BtreeCursor)
nscanned:被掃描的文檔數量
n:返回的文檔數量
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、優化器profile

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

默認為0 不輸出 1按第二個參數時間閥值(單位為毫秒)輸出 2全部輸出。通常我們在調優的時候都在測試環境打開參數。在生產環境下一般不輸出profile。

比如

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

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

profile輸出的各項值的含義是

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

如果發現時間比較長,那么就需要作優化。

比如

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

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

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

三、MongoDB的索引選擇機制

MongoDB的優化程序會在對比中選擇更優秀的索引。

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

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

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

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

四、MongoDB的索引總結

1. 等值測試

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

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

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

3. 范圍過濾

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

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

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

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

關于Mongodb索引的優化就給大家介紹這么多,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产一区二区三区| 欧美成人在线免费| 亚洲小视频在线| 欧美国产视频一区二区| 日韩中文字幕亚洲| 欧美一级电影久久| 亚洲第一福利网| 欧美大肥婆大肥bbbbb| 亚洲成人a**站| 久久91精品国产| 国产精品久久一| 国产成人高潮免费观看精品| 成人激情黄色网| 欧美成人高清视频| 97视频色精品| 欧美日韩免费在线观看| 午夜精品久久久久久久99热| 亚洲精品国产电影| 成人精品一区二区三区电影免费| 色综合伊人色综合网| 色777狠狠综合秋免鲁丝| 亚洲精品国产精品国自产观看浪潮| 日本不卡免费高清视频| 国产中文字幕亚洲| 日韩成人小视频| 精品久久久av| 国产精品99久久99久久久二8| 亚洲福利视频网站| 日韩精品极品毛片系列视频| 亚洲在线免费观看| 国产精品高潮粉嫩av| 国内揄拍国内精品少妇国语| 欧美日韩免费在线观看| 亚洲在线第一页| 亚洲人精选亚洲人成在线| 日韩在线观看免费全集电视剧网站| 国产91亚洲精品| 黄色一区二区在线| 中文字幕日韩av电影| 性色av香蕉一区二区| 亚洲综合中文字幕在线| 精品一区二区三区四区在线| 欧美日韩综合视频网址| 久久久女女女女999久久| 亚洲国模精品私拍| 不卡在线观看电视剧完整版| 8x海外华人永久免费日韩内陆视频| 欧美电影免费观看电视剧大全| 国产精品爽黄69天堂a| 亚洲欧美日韩精品久久亚洲区| 国产性猛交xxxx免费看久久| 高清一区二区三区四区五区| 国产精品精品一区二区三区午夜版| 一区二区三区高清国产| 亚洲自拍偷拍网址| 国产精品日韩欧美综合| 在线色欧美三级视频| 日韩黄色av网站| 亚洲色图狂野欧美| 亚洲国产另类久久精品| 九九热最新视频//这里只有精品| 亚洲乱码av中文一区二区| 精品自拍视频在线观看| 狠狠躁夜夜躁人人爽天天天天97| 久久99精品国产99久久6尤物| 色悠久久久久综合先锋影音下载| 国产精品日韩在线一区| 欧美性做爰毛片| 成人深夜直播免费观看| 国产精品嫩草视频| 色妞欧美日韩在线| 亚洲午夜精品久久久久久久久久久久| 欧美日韩一区二区精品| 国内揄拍国内精品| 国产成人午夜视频网址| 久久在线免费视频| 成人有码视频在线播放| 青青青国产精品一区二区| 日韩禁在线播放| 美女999久久久精品视频| 欧美国产日本高清在线| 亚洲最大福利视频网| 亚洲第一区中文99精品| 国产香蕉精品视频一区二区三区| 亚洲美女视频网站| 久久99热精品| 亚洲综合日韩在线| 成人免费看片视频| 亚洲自拍偷拍网址| 亚洲字幕一区二区| 久久99久久99精品中文字幕| 九九热r在线视频精品| 欧美成人精品在线播放| 国模gogo一区二区大胆私拍| 国产福利视频一区二区| 一区二区三区 在线观看视| 午夜精品一区二区三区在线| 国产日产亚洲精品| 精品国内产的精品视频在线观看| www日韩欧美| 久久久久久中文| 日韩激情第一页| 热久久美女精品天天吊色| 中文字幕在线亚洲| 久久亚洲国产精品成人av秋霞| 欧美日韩国产中文精品字幕自在自线| www.久久久久久.com| 欧美一级大片在线免费观看| 日韩欧美高清在线视频| 在线观看国产精品淫| 成人欧美一区二区三区在线湿哒哒| 精品久久久久久中文字幕一区奶水| 午夜欧美不卡精品aaaaa| 日韩国产精品一区| 亚洲xxx视频| 亚洲影院色无极综合| 欧美中文字幕在线| 亚洲a在线播放| 国产精品91在线观看| 日韩中文在线中文网三级| 亚洲国产精品一区二区三区| 亚洲成人激情在线| 亚洲福利视频久久| 在线观看久久久久久| 久久久久久久国产精品视频| 成人黄色午夜影院| 日韩精品视频免费| 亚洲人成77777在线观看网| 日韩欧美大尺度| 国语自产精品视频在线看抢先版图片| 国产精品美女无圣光视频| 国产精品video| 成人免费视频97| 97精品国产97久久久久久春色| 久青草国产97香蕉在线视频| 日日狠狠久久偷偷四色综合免费| 久久精品视频在线观看| 在线视频欧美日韩| 欧美裸体xxxx极品少妇软件| 亚洲一区二区久久久久久久| 69视频在线播放| 亚洲无亚洲人成网站77777| 久久网福利资源网站| 成人欧美在线视频| 91在线高清免费观看| 中文字幕亚洲欧美日韩高清| 亚洲级视频在线观看免费1级| 日韩在线免费高清视频| 在线日韩精品视频| 26uuu另类亚洲欧美日本一| 欧美肥婆姓交大片| 久久久免费av| 久久99国产综合精品女同| 国内精品视频久久| 91色视频在线观看| 综合国产在线视频| 成人午夜激情免费视频| 欧美色播在线播放| 午夜精品一区二区三区视频免费看| 色综合久久中文字幕综合网小说| 久久精品99国产精品酒店日本| 亚洲国产另类 国产精品国产免费| 欧美中文字幕在线观看| 亚洲香蕉成视频在线观看|