(3)mongodb的學習使用_MongoDB 索引 explain 分析查詢速度

一、索引基礎
 

批量添加數據,測試有索引的速度

for(var i=0; i<6000000;i++){ db.shop.insert({"id":i,"title":"shop"+i,"from":"China"})}

創建索引命令
 
db.user.ensureIndex({"username":1})
db.user.createIndex({"username":1})
注意在 3.0.0 版本前創建索引方法爲 db.collection.ensureIndex(),之後的版本使用了 db.collection.createIndex() 方法,ensureIndex() 還能用,但只是 createIndex() 的別名。
 
獲取當前集合的索引:
 
db.user.getIndexes()
 
刪除索引的命令是:
 
db.user.dropIndex({"username":1})
 
創建複合索引
數字 1 表示 username 鍵的索引按升序存儲,-1 表示 age 鍵的索引按照降序方式存儲。
db.user.ensureIndex({"username":1, "age":-1})
 
該索引被創建後,基於 username age 的查詢將會用到該索引,或者是基於 username
的查詢也會用到該索引,但是隻是基於 age 的查詢將不會用到該複合索引。因此可以說,
如果想用到複合索引,必須在查詢條件中包含複合索引中的前 N 個索引列。然而如果查詢
條件中的鍵值順序和複合索引中的創建順序不一致的話,MongoDB 可以智能的幫助我們調
整該順序,以便使複合索引可以爲查詢所用。如:
db.user.find({"age": 30, "username": "stephen"})
對於上面示例中的查詢條件,MongoDB 在檢索之前將會動態的調整查詢條件文檔的順
序,以使該查詢可以用到剛剛創建的複合索引。
 
對於上面創建的索引,MongoDB 都會根據索引的 keyname 和索引方向爲新創建的索引
自動分配一個索引名,下面的命令可以在創建索引時爲其指定索引名,如:
db.user.ensureIndex({"username":1},{"name":"userindex"})
 
隨着集合的增長,需要針對查詢中大量的排序做索引。如果沒有對索引的鍵調用 sort
MongoDB 需要將所有數據提取到內存並排序。因此在做無索引排序時,如果數據量過大以
致無法在內存中進行排序,此時 MongoDB 將會報錯。
二、唯一索引
db.user.ensureIndex({"userid":1},{"unique":true})
如果再次插入 userid 重複的文檔時,MongoDB 將報錯
db.user.dropIndex({"userid":1})
我們同樣可以創建複合唯一索引,即保證複合鍵值唯一即可
db.user.ensureIndex({"userid":1,"age":1},{"unique":true})
 
三、索引的一些參數
 
先刪除剛剛創建的唯一索引。
 
四、使用 explain  db.shop.find({"id":999999}).explain()
 
 
五、explain executionStats 查詢具體的執行
時間
explain executionStats 查詢具體的執行
db.tablename.find().explain( "executionStats" )
關注輸出的如下數值:explain.executionStats.executionTimeMillis
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章