MongoDB索引的基本用法

來源:互聯網
上載者:User

標籤:tin   exe   建立   uniq   class   font   建立   去掉   用法   

索引通過ensureIndex方法建立:

> db.collection.ensureIndex({‘name‘: 1})

也可以建立複合索引:

> db.collection.ensureIndex({‘age‘: 1, ‘name‘: 1})

一般而言,採用ensureIndex({排序鍵}, {查詢鍵})的方式建立複合索引效率更高。比如,針對下列操作:

> db.collection.find({‘age‘: {‘$gte‘: 20, ‘$lte‘:29}}).sort({‘name‘: 1})

如採用age、name的方式建立索引,則搜尋的文檔很少(只檢索age在20-29之間的記錄),但是排序要花費大量時間。如採用name、age的方式建立索引,則搜尋的文檔很多(按照name排查),但是不需要排序,因為在name上建立了第一索引,所以天然按順序排列。因為搜尋很多情況下只需要返回幾條記錄,所以用limit限值數量後,第二種方式會遠快於第一種。

也可以反向建立索引(age:1, name:-1),一般與排序次序相同。

{‘x‘: {‘$exists‘: false}}也可以建立索引,但是效率偏低,因為x不存在和x值為null的儲存方式一樣,所以不得不遍曆整個文檔。

在建立索引時,可以指定unique值為true,即建立唯一索引:

> db.collection.ensureIndex({‘key‘: ‘value‘}, {‘unique‘: true})

值為null或者不存在視為同一種情況,所以建立唯一索引後,集合中最多隻能有一個文檔不存在key鍵或者key的值為value。如果希望唯一索引只針對key存在的情況有效,則可以建立稀疏索引:

> db.collection.ensureIndex({‘key‘: ‘value‘}, {‘unique‘: true, ‘sparse‘: true})

這樣唯一索引就只針對key存在的情況有效。注意,稀疏索引不一定是唯一索引,在上面的操作中把unique去掉,則得到一個不唯一的稀疏索引。這樣在查詢key的值時,key不存在的記錄就不會返回。

可以採用explain方法對查詢過程進行診斷。

不是所有情況下都適合使用索引。當集合、文檔較大,或者查詢為選擇性查詢時可以考慮索引。相反的,如果集合和文檔較小,或者需要進行全表掃描時,就不應該使用索引。

想要查詢集合中的所有索引時,可以用getIndexes方法:

> db.collection.getIndexes()

刪除索引用dropIndex方法,需要先通過getIndexes擷取name欄位的值來指定需要刪除的索引。

MongoDB索引的基本用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.