MongoDB索引,性能分析
索引的限制:
索引名称不能超过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(索引) 是否多键(组合)索引 返回行数 扫描行数 扫描行数 所有计划扫描的次数 所有计划扫描的次数 是否在内存中排序
耗时(毫秒) 服务器
|