索引的限制:
索引名稱不能超過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(索引) 是否多鍵(組合)索引 返回行數 掃描行數 掃描行數 所有計劃掃描的次數 所有計劃掃描的次數 是否在記憶體中排序
耗時(毫秒) 伺服器
|