MongoDB索引,效能分析

ahuo發表於2018-09-18

索引的限制:

索引名稱不能超過128個字元

每個集合不能超過64個索引

複合索引不能超過31列

 

 

 

MongoDB 索引語法

db.collection.createIndex({ <field>: < 1 or -1 > })

db.collection.ensureIndex({ <field>: < 1 or -1 > })

 

db.collection.createIndex( { "filed": sort } )

db.collection.createIndex( { "filed": sort , "filed2": sort } )

 

db.tab.ensureIndex({"id":1})

db.tab.ensureIndex({"id":1} ,{ name:"id_ind"})

db.tab.ensureIndex({"id":1,"name":1},{background:1,unique:1})

db.tab.ensureIndex( { "id" : "hashed" })

 

建立索引(兩種方法)

 

 

filed :為鍵列

sort :為排序。1 為升序;-1為降序。

 

建立單列索引

建立索引並給定索引名稱

後臺建立唯一的複合索引

建立雜湊索引

 (更多引數 看文章底部)

db.tab.indexStats( { index: "id_ind" } )

db.runCommand( { indexStats: "tab", index: "id_ind" } )

db.tab.getIndexes()

db.system.indexes.find()

(前2個似乎不能用,官方文件解釋)

(not intended for production deployments)

檢視索引

db.tab.totalIndexSize();

檢視索引大小

db.tab.reIndex()

db.runCommand({reIndex:"tab"})

重建索引

db.tab.dropIndex(<indexname>)

db.tab.dropIndex("id_1")

db.tab.dropIndexes()

刪除索引

<indexname>為getIndexes看到的索引名稱

刪除所有索引(注意!)

 

 

分析函式

db.tab.find({"name":"kk50000"}).explain()

查詢name=”kk50000”的執行分析

db.tab.find({"name":"kk50000"}).explain("queryPlanner")

db.tab.find({"name":"kk50000"}).explain("Verbosity")

db.tab.find({"name":"kk50000"}).explain("executionStats")

db.tab.find({"name":"kk50000"}).explain("allPlansExecution")

這3種方法執行結果完全包括上面這種的結果

db.tab.find({"name":"kk50000"}).explain()  結果做分析:

"cursor" : "BasicCursor",

"isMultiKey" : false,

"n" : 1,

"nscannedObjects" : 966423,

"nscanned" : 966423,

"nscannedObjectsAllPlans" : 966423,

"nscannedAllPlans" : 966423,

"scanAndOrder" : false,

"indexOnly" : false,

"nYields" : 7555,

"nChunkSkips" : 0,

"millis" : 4677,

"server" : "kk-ad:27017",

"filterSet" : false

遊標型別。BasicCurso(掃描), BtreeCursor(索引)

是否多鍵(組合)索引

返回行數

掃描行數

掃描行數

所有計劃掃描的次數

所有計劃掃描的次數

是否在記憶體中排序

 

 

 

耗時(毫秒)

伺服器

 

相關文章