mongodb索引
建立索引:
db.getcollection("test").ensureindex();
或者db.getcollection("test").createindex();}},
"ok" : 1.0
}索引建立成功;
查詢索引狀態
db.getcollection("test").getindexes();[,
"name" : "_id_",
"ns" : "dev.test"},,
"name" : "name_1",
"ns" : "dev.test"}]
可以看到_id索引(預設的),和name索引
刪除索引
db.getcollection("test").dropindex();
刪除結果}},
"ok" : 1.0
}再次查詢
db.getcollection("test").getindexes();[,
"name" : "_id_",
"ns" : "dev.test"}]
索引刪除成功;
再次建立索引,並檢視執行計畫;
db.getcollection("test").ensureindex();
db.getcollection("test").find().explain();
,"plannerversion" : 1,
"namespace" : "dev.test",
"indexfilterset" : false,
"parsedquery" :
},"winningplan" : ,
"indexname" : "name_1",
"ismultikey" : false,
"isunique" : false,
"issparse" : false,
"ispartial" : false,
"indexversion" : 1,
"direction" : "forward",
"indexbounds" : }},
"rejectedplans" : }]
}},"executionstats" : ,
"indexname" : "name_1",
"ismultikey" : false,
"isunique" : false,
"issparse" : false,
"ispartial" : false,
"indexversion" : 1,
"direction" : "forward",
"indexbounds" : ,
"key***amined" : 2,
"dupstested" : 0,
"dupsdropped" : 0,
"seeninvalidated" : 0}}
}]}},
"ok" : 1.0
}"executionstats"表示執行狀態,
totalkey***amined表示用到的索引數,如果這個值為0,則說明未使用到索引,
totaldoc***amined表示掃瞄的文件書
rejectedplans代表棄用的索引,當前關於name的索引只有乙個,所以棄用所以為null,
我們新增乙個name和age的聯合索引:
db.getcollection("test").ensureindex();
在執行查詢計畫:
db.getcollection("test").find().explain("executionstats");
/* 1 */
,"plannerversion" : 1,
"namespace" : "dev.test",
"indexfilterset" : false,
"parsedquery" :
},"winningplan" : ,
"indexname" : "name_1",
"ismultikey" : false,
"isunique" : false,
"issparse" : false,
"ispartial" : false,
"indexversion" : 1,
"direction" : "forward",
"indexbounds" : }},
"rejectedplans" : [
,"indexname" : "name_1_age_1",
"ismultikey" : false,
"isunique" : false,
"issparse" : false,
"ispartial" : false,
"indexversion" : 1,
"direction" : "forward",
"indexbounds" : }}
]}]}
},"executionstats" : ,
"indexname" : "name_1",
"ismultikey" : false,
"isunique" : false,
"issparse" : false,
"ispartial" : false,
"indexversion" : 1,
"direction" : "forward",
"indexbounds" : ,
"key***amined" : 2,
"dupstested" : 0,
"dupsdropped" : 0,
"seeninvalidated" : 0}}
}]}},
"ok" : 1.0
}發現了棄用索引;
可以使用hint()指定使用的索引:
db.getcollection("test").find().hint().explain("executionstats");
必須注意的是hint欄位的順序必須和已建立的索引保持一致
一般情況下,mongodb會自動選擇索引,不需要手動hint
stage狀態分析
stage
描述collscan
全表掃瞄
ixscan
掃瞄索引
fetch
根據索引去檢索指定document
shard_merge
將各個分片返回資料進行merge
sort
表明在記憶體中進行了排序
limit
使用limit限制返回數
skip
使用skip進行跳過
idhack
針對_id進行查詢
sharding_filter
通過mongos對分片資料進行查詢
count
利用db.coll.explain().count()之類進行count運算
countscan
count不使用index進行count時的stage返回
count_scan
count使用了index進行count時的stage返回
subpla
未使用到索引的$or查詢的stage返回
text
使用全文索引進行查詢時候的stage返回
projection
限定返回字段時候stage的返回
深入學習之http
http協議是無狀態的,指的是協議對於事務處理沒有記憶能力,伺服器不知道客戶端是什麼狀態。也就是說,開啟乙個伺服器上的網頁和你之前開啟這個伺服器上的網頁之間沒有任何聯絡。http是乙個無狀態的面向連線的協議,無狀態不代表http不能保持tcp連線,更不能代表http使用的是udp協議 無連線 從 h...
深入學習android之任務與堆疊
乙個任務其實就是乙個activity的堆疊。也是使用者感知到的 乙個應用 預設情況下,乙個應用程式中的activity傾向於屬於同乙個任務。但是可以通過設定tackaffinity屬性,使不同應用程式的activity享有同乙個affinity,或者同乙個程式的activity有不同的affinit...
深入學習之淺拷貝
let foo let bar object.assign bar,foo foo.a foo.a 2 true bar.a 1 true 乍一看,好像已經實現了深拷貝的效果,對foo.a進行的操作並沒有體現在bar.a中,但是再往後看 foo.c.d foo.c.d 2 true bar.c.d ...