1.索引的相關(guān)介紹:
創(chuàng)新互聯(lián)公司專注于興山企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都做商城網(wǎng)站。興山網(wǎng)站建設(shè)公司,為興山等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站開發(fā),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)monggodb的索引也是一顆平衡二叉樹,所以在傳統(tǒng)數(shù)據(jù)庫中的絕大部分的索引優(yōu)化技術(shù)也是可用的.
注意:mongodb可以在任意方向上對數(shù)據(jù)進(jìn)行遍歷(這點(diǎn)和關(guān)系數(shù)據(jù)庫中的索引不一樣),但這個(gè)僅限于單鍵排序,對于多鍵排序索引的方向還是比較重要的.
下面是個(gè)單鍵排序無方向性的具體的例子:
上面是兩個(gè)查詢的執(zhí)行計(jì)劃,紅色部分的參數(shù)表示,查詢是否在內(nèi)存中有排序操作,
從上面的例子中可以很明顯的看出,無論是按照iage的降序還是升序排序,查詢都沒有在內(nèi)存中有排序操作.
2.mongodb 中的索引類型比較多,我這里僅僅列出比較常見的索引類型,更多的索引類型,參見http://www.cnblogs.com/xinghebuluo/archive/2011/12/19/2293043.html
唯一索引:它保證跟已有文檔的索引關(guān)鍵字重復(fù)的文檔不會被插入
上面的的例子中已成功創(chuàng)建一個(gè)唯一索引.
復(fù)合唯一索引:多個(gè)鍵值組合的唯一索引。
復(fù)合唯一索引實(shí)例:
創(chuàng)建唯一索引的注意事項(xiàng):
(1)唯一索引和不存在的關(guān)鍵字:
當(dāng)保存到集合中的文檔在索引字段沒有值的話,它的索引字段會被賦值為null然后插入。就是說,你不可能在唯一索引中插入多個(gè)在某個(gè)索引字段都沒有值的文檔。(多個(gè)null值被認(rèn)為是相等的值)
以下實(shí)例在唯一索引字段上插入多個(gè)null值報(bào)錯(cuò).
(2).對已經(jīng)存在的重復(fù)值的字段創(chuàng)建唯一索引.
如果直接創(chuàng)建唯一索引肯定是會報(bào)錯(cuò)的.
(3).如果一定要在這樣的字段上創(chuàng)建唯一索引,可以在創(chuàng)建唯一索引的時(shí)候指定一個(gè)關(guān)鍵字dropDups來強(qiáng)制創(chuàng)建索引.但是這種創(chuàng)建索引的方法會刪除集合中的數(shù)據(jù),所以不建議使用這種方法。
使用dropDups強(qiáng)制創(chuàng)建索引范例:
稀疏索引:在mongdo的集合中,每個(gè)文檔的鍵值對可以不一樣(行的列數(shù)不一樣),那么在一個(gè)索引中,字段可能在某個(gè)文檔中,也有可能不在某個(gè)文檔中,當(dāng)字段不在某個(gè)文檔中的時(shí)候,查詢利用索引得到數(shù)據(jù)時(shí)默認(rèn)情況下會將沒有這個(gè)字段的文檔查詢出來.
以上實(shí)例中的查詢,通過索引iage 得到了數(shù)據(jù),但是將不包含iage字段的文檔也查詢出來了,
這個(gè)時(shí)候可以通過稀疏索引將那些沒有包含索引字段的文檔過濾掉.
以下是一個(gè)通過稀疏索引過濾不包含索引字段的的文檔的例子:
從執(zhí)行計(jì)劃中可以看到,查詢是通過稀疏索引得到數(shù)據(jù)的,并且查詢出來的結(jié)果集中全部包含iage字段(過濾掉了沒有包含iage的文檔).
3.索引管理:
查看制定集合下的索引信息 :db.collection.getIndexes();
查看當(dāng)前架構(gòu)下的所有索引信息 :db.system.indexes.find({});
創(chuàng)建索引:db.collection.ensureIndex({key:1}},{unique:true,dropDups:true});
hint({}):強(qiáng)制使用某個(gè)鍵值(索引)
還可以在后臺建立索引db.collection.ensureindex({someFiled:1},{background:1})
優(yōu)點(diǎn):定期釋放鎖,以便客服端寫入數(shù)據(jù).
缺點(diǎn):耗時(shí)較長
前臺建立索引(默認(rèn)):
優(yōu)點(diǎn):耗時(shí)相對較少
缺點(diǎn):索引創(chuàng)建期間客服端不能寫入數(shù)據(jù)
刪除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)
重建索引:db.test.reIndex()
標(biāo)識索引: db.collection.ensureIndex({key:1}},{name:"Index_name"});
(1):查看指定集合的所有索引:db.colleciton.getIndexes();
(2)查看當(dāng)前架構(gòu)下的所有索引信息 :db.system.indexes.find({});
(3)創(chuàng)建索引:db.collection.ensureIndex({key:1},{unique:true,dropDups:true,sparse:true})
上面是創(chuàng)建索引的標(biāo)準(zhǔn)語法,第二個(gè)大括號({unique:true,dropDups:true,sparse:true})為索引類型參數(shù)。
Unique:表示唯一索引。
Sparse:表示稀疏索引.
dropDups:當(dāng)索引字段中存在重復(fù)值時(shí),強(qiáng)制刪除重復(fù)的文檔,該參數(shù)會丟失數(shù)據(jù),不建議使用該參數(shù).
(4)hint({}):強(qiáng)制使用某個(gè)鍵值(索引)
下面實(shí)例中,從執(zhí)行計(jì)劃可以看出,強(qiáng)制使用索引了。
(5).刪除索引:db.collection.dropIndexes() ,db.collection.dropIndex(index)
db.collection.dropIndexes():刪除集合下面的所有索引.
集合test下面已經(jīng)沒有可刪除的索引,_id_ 是系統(tǒng)自帶的索引,無法手動刪除.
db.collection.dropIndex(index_name):刪除指定索引
(6).當(dāng)索引效率低下的時(shí)候(可能是碎片較多),就需要重建索引了。db.test.reIndex() 。
db.test.reIndex():重建索引
重建單個(gè)索引或是 集合下的所有索引。
4.執(zhí)行計(jì)劃解讀:
正確解讀一個(gè)查詢的執(zhí)行計(jì)劃是優(yōu)化查詢的第一步,所以必須準(zhǔn)確的讀懂查詢的執(zhí)行計(jì)劃:
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前題目:mongodb索引相關(guān)-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://jinyejixie.com/article20/jeojo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、App設(shè)計(jì)、網(wǎng)站營銷、外貿(mào)網(wǎng)站建設(shè)、Google、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容