索引

索引
索引創建

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.collection.ensureIndex({field:1/-1}); 1是升續 -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});
如果不是稀疏索引,是普通索引,則沒有這一列也給你建立索引null:

索引

索引

建立了稀疏索引則查不到了:

索引

db.tea.find();
{ "_id" : ObjectId("5275f99b87437c610023597b"), "email" : "[email protected]" }
{ "_id" : ObjectId("5275f99e87437c610023597c"), "email" : "[email protected]" }
{ "_id" : ObjectId("5275f9e887437c610023597e"), "email" : "[email protected]" }
{ "_id" : ObjectId("5275fa3887437c6100235980") }
如上內容,最後一行沒有email列,
如果分別加普通索引,和稀疏索引,
對於最後一行的email分別當成null 和 忽略最後一行來處理.
根據{email:null}來查詢,前者能查到,而稀疏索引查不到最後一行.

創建哈希索引(2.4新增的)
哈希索引速度比普通索引快,但是,無能對範圍查詢進行優化.(比如在機械硬盤上,100在這個位置,101可能就在更遠的位置,這樣並不好查)
適宜於---隨機性強的散列
db.collection.ensureIndex({file:’hashed’});

重建索引
一個表經過很多次修改後,導致表的文件產生空洞,索引文件也如此.
可以通過索引的重建,減少索引文件碎片,並提高索引的效率.
類似mysql中的optimize table

db.collection.reIndex()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章