MongoDB索引創建(5)


索引創建

1:索引提高查詢速度,降低寫入速度,權衡常用的查詢字段,不必在太多列上建索引

2. 在mongodb中,索引可以按字段升序/降序來創建,便於排序

3. 默認是用btree來組織索引文件,2.4版本以后,也允許建立hash索引.

 

查看查詢計划

db.find(query).explain();

"cursor" : "BasicCursor", ----說明沒有索引發揮作用

"nscannedObjects" : 1000 ---理論上要掃描多少行

cursor" : "BtreeCursor sn_1", 用到的btree索引

 

 

索引常用命令:

查看當前索引狀態: db.collection.getIndexes();

db.articles.getIndexes();

創建普通的單列索引:db.collection.ensureIndex({field:1/-1});  1是升續 2是降續

db.articles.ensureIndex({title:1})

 

刪除單個索引

db.collection.dropIndex({filed:1/-1});

 

一下刪除所有索引

db.collection.dropIndexes();

 

創建多列索引 

db.collection.ensureIndex({field1:1/-1, field2:1/-1});

 

創建子文檔索引

db.collection.ensureIndex({filed.subfield:1/-1});

 

 

 

創建唯一索引:

db.collection.ensureIndex({filed.subfield:1/-1}, {unique:true});

 

創建稀疏索引:

稀疏索引的特點------如果針對field做索引,針對不含field列的文檔,將不建立索引.

與之相對,普通索引,會把該文檔的field列的值認為NULL,並建索引.

適宜於: 小部分文檔含有某列時.

db.collection.ensureIndex({field:1/-1},{sparse:true});

 

> db.tea.find();

{ "_id" : ObjectId("5275f99b87437c610023597b"), "email" : "a@163.com" }

{ "_id" : ObjectId("5275f99e87437c610023597c"), "email" : "b@163.com" }

{ "_id" : ObjectId("5275f9e887437c610023597e"), "email" : "c@163.com" }

{ "_id" : ObjectId("5275fa3887437c6100235980") }

如上內容,最后一行沒有email列,

如果分別加普通索引,和稀疏索引,

對於最后一行的email分別當成null 和 忽略最后一行來處理.

根據{email:null}來查詢,前者能查到,而稀疏索引查不到最后一行.

 

 

創建哈希索引(2.4新增的)

哈希索引速度比普通索引快,但是,無法對范圍查詢進行優化.

適宜於---隨機性強的散列

db.collection.ensureIndex({file:’hashed’});

 

重建索引

一個表經過很多次修改后,導致表的文件產生空洞,索引文件也如此.

可以通過索引的重建,減少索引文件碎片,並提高索引的效率.

類似mysql中的optimize table

 

db.collection.reIndex()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM