一、索引
MongoDB 提供了多樣性的索引支持,索引信息被保存在system.indexes 中,且默認總是為_id創(chuàng)建索引,它的索引使用基本和MySQL 等關(guān)系型數(shù)據(jù)庫一樣。其實可以這樣說說,索引是凌駕于數(shù)據(jù)存儲系統(tǒng)之上的另一層系統(tǒng),所以各種結(jié)構(gòu)迥異的存儲都有相同或相似的索引實現(xiàn)及使用接口并不足為 奇。
1.基礎(chǔ)索引
在字段age 上創(chuàng)建索引,1(升序);-1(降序):
db.users.ensureIndex({age:1})
_id 是創(chuàng)建表的時候自動創(chuàng)建的索引,此索引是不能夠刪除的。當(dāng)系統(tǒng)已有大量數(shù)據(jù)時,創(chuàng)建索引就是個非常耗時的活,我們可以在后臺執(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 } );//下面這個查詢將會用到我們剛剛建立的索引db.factories.find( { addr: { city: "Beijing", state: "BJ" } } );//但是下面這個查詢將不會用到索引,因為查詢的順序跟索引建立的順序不一樣db.factories.find( { addr: { state: "BJ" , city: "Beijing"} } );
3. 組合索引
跟其它數(shù)據(jù)庫產(chǎn)品一樣,MongoDB 也是有組合索引的,下面我們將在addr.city 和addr.state上建立組合索引。當(dāng)創(chuàng)建組合索引時,字段后面的1 表示升序,-1 表示降序,是用1 還是用-1 主要是跟排序的時候或指定范圍內(nèi)查詢 的時候有關(guān)的。
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”即可創(chuàng)建唯一索引。例如,往表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執(zhí)行計劃
MongoDB 提供了一個 explain 命令讓我們獲知系統(tǒng)如何處理查詢請求。利用 explain 命令,我們可以很好地觀察系統(tǒng)如何使用索引來加快檢索,同時可以針對性優(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: 耗時(毫秒)
indexBounds: 所使用的索引
三、優(yōu)化器profile
在MySQL 中,慢查詢?nèi)罩臼墙?jīng)常作為我們優(yōu)化數(shù)據(jù)庫的依據(jù),那在MongoDB 中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。
1.開啟profiling功能
有兩種方式可以控制 Profiling 的開關(guān)和級別,第一種是直接在啟動參數(shù)里直接進行設(shè)置。啟動MongoDB 時加上 主站蜘蛛池模板: free国产hd老熟bbw| 草草在线视频 | 午夜亚洲视频 | 一本色道久久综合亚洲精品图片 | 欧美顶级毛片在线播放小说 | 黄色网欧美 | 91美女视频在线观看 | 91成人免费在线观看 | www亚洲免费 | 成人精品视频在线 | 在线播放免费人成毛片乱码 | 全免费午夜一级毛片真人 | 欧美一级黄色免费看 | 国产伦久视频免费观看视频 | 久久久久久久爱 | 美女黄页网站免费进入 | 国产精品免费大片 | 狠狠干狠狠操 | 日韩午夜一区二区三区 | va免费视频 | 精品国产九九九 | 色诱亚洲精品久久久久久 | 女人裸体让男人桶全过程 | 三级xxxx | 久久精品视频12 | 国产美女爽到喷白浆的 | 羞羞草视频 | 色阁阁69婷婷 | 久久精品久久精品国产大片 | 日韩视频不卡 | 日韩激情一区 | 茄子福利视频 | 最新中文字幕在线视频 | 精品一区二区在线播放 | 国产毛片视频 | 色诱亚洲精品久久久久久 | 久精品国产 | www.精品久久| 99视频有精品 | 色就操 | 成年人在线视频免费 |