標籤: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索引的基本用法