MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。
MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。
一、索引
MongoDB 提供了多樣性的索引支持,索引信息被保存在system.indexes 中,且默認總是為_id創建索引,它的索引使用基本和MySQL 等關系型數據庫一樣。其實可以這樣說說,索引是凌駕于數據存儲系統之上的另一層系統,所以各種結構迥異的存儲都有相同或相似的索引實現及使用接口并不足為 奇。
1.基礎索引
在字段age 上創建索引,1(升序);-1(降序):
db.users.ensureIndex({age:1})
_id 是創建表的時候自動創建的索引,此索引是不能夠刪除的。當系統已有大量數據時,創建索引就是個非常耗時的活,我們可以在后臺執行,只需指定“backgroud:true”即可。
db.t3.ensureIndex({age:1} , {backgroud:true})
2.文檔索引
索引可以任何類型的字段,甚至文檔:
db.factories.insert( { name: "wwl", addr: { city: "Beijing", state: "BJ" } } );//在addr 列上創建索引db.factories.ensureIndex( { addr : 1 } );//下面這個查詢將會用到我們剛剛建立的索引db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );//但是下面這個查詢將不會用到索引,因為查詢的順序跟索引建立的順序不一樣db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );
3. 組合索引
跟其它數據庫產品一樣,MongoDB 也是有組合索引的,下面我們將在addr.city 和addr.state上建立組合索引。當創建組合索引時,字段后面的1 表示升序,-1 表示降序,是用1 還是用-1 主要是跟排序的時候或指定范圍內查詢 的時候有關的。
db.factories.ensureIndex( { "addr.city" : 1, "addr.state" : 1 } );// 下面的查詢都用到了這個索引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”即可創建唯一索引。例如,往表t4 中插入2 條記錄:
db.t4.ensureIndex({firstname: 1, lastname: 1}, {unique: true});
5.強制使用索引
hint 命令可以強制使用某個索引。
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執行計劃
MongoDB 提供了一個 explain 命令讓我們獲知系統如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統如何使用索引來加快檢索,同時可以針對性優化索引。
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: 返回游標類型(BasicCursor 或 BtreeCursor)
•nscanned: 被掃描的文檔數量
•n: 返回的文檔數量
•millis: 耗時(毫秒)
•indexBounds: 所使用的索引
三、優化器profile
在MySQL 中,慢查詢日志是經常作為我們優化數據庫的依據,那在MongoDB 中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。
1.開啟profiling功能
有兩種方式可以控制 Profiling 的開關和級別,第一種是直接在啟動參數里直接進行設置。啟動MongoDB 時加上 主站蜘蛛池模板: 一区二区三区在线免费观看 | 三级成人 | 国产精品久久一区二区三区 | 黄色网址免费大全 | 国产午夜精品一区二区三区 | av影音资源 | 污片在线免费看 | 亚洲一区 日韩精品 中文字幕 | 国产成人在线免费观看 | 久久久99精品免费观看 | 亚洲视频在线观看一区二区三区 | 欧美 日韩 国产 成人 在线 | 国产在线一区二区三区 | 伊人久久一区二区三区 | 国产情侣自拍啪啪 | 人成精品 | jizzjizz亚洲中国少妇 | www一区二区 | 国产区免费| 国产xxxx精品 | 日韩精品免费观看 | 久久一区国产 | 精品日韩一区二区三区 | 色婷婷综合久色aⅴ | 一区二区日本 | 黄色大片观看 | 九九热精品免费视频 | 中文字幕一区二区三区精彩视频 | 日韩在线资源 | 亚洲 欧美 日韩 在线 | 91九色视频在线 | 欧美午夜精品理论片a级按摩 | 久草在线在线精品观看 | 欧美成人h版在线观看 | 亚洲精品视频免费看 | 欧美精品一区视频 | 草草草影院| 国产综合亚洲精品一区二 | 国产99一区 | 国产福利视频在线观看 | www97影院|