mongodb(2)mongodb提升
1.索引
Mongodb的大多數索引是建立在btree上,每個集合最多只能有64個索引
1)單字段索引創建
db.user.createIndex( {age: 1} ) //1表示升序,-1表示降序
db.user.createIndex( {age: 1},{"unique": true} )//唯一索引
db.person.createIndex( {age: 1} ,{spare:ture})創建稀疏索引//針對含有該字段做索引,針對不含該字段不建立索引
db.user.createIndex( {age: 1},... ,...)
參數說明:
background,Boolean,在後臺建立索引,以便建立索引時不阻止其他數據庫活動。默認值 false。
unique,Boolean,創建唯一索引。默認值 false。
name,String,指定索引的名稱。如果未指定,MongoDB會生成一個索引字段的名稱和排序順序串聯。
sparse,Boolean,對文檔中不存在的字段數據不啟用索引。默認值是 false。
v,index version,索引的版本號。
weights,document,索引權重值,數值在 1 到 99,999 之間,表示該索引相對於其他索引字段的得分權重
2)復合索引創建
db.person.createIndex( {age: 1, name: 1} )
3)刪除索引
db.user.dropIndex({age:1/-1})//移除索引
db.collection.dropIndexes();//刪除該集合的所有索引
4)索引常用的一些方法
db.user.reindex()//目的類似mysql碎片整理,減少空洞。
db.user.getIndexes()//查看索引
db.user.totalIndexSize()//查看索引所占的空間大小
5)explain()優化分析
db.user.find({age:{$gt:9990}}).explain("executionStats") //執行計劃
備註:https://docs.mongodb.com/v3.2/reference/explain-results/#queryplanner
{ "queryPlanner" : { "plannerVersion" : 1, //計劃版本 "namespace" : "admin.user", //庫.集合 "indexFilterSet" : false, //是否用到索引,false表示沒有 "parsedQuery" : { //解析查詢條件,即過濾條件 "age" : { "$gt" : 9990 } }, "winningPlan" : { //自動優化後的執行計劃 "stage" : "COLLSCAN", //掃描方式:COLLSCAN 全表掃描 ,IXSCAN 索引掃描,FETCH 根索引去檢索文檔,SHARD_MERGE 合並分片結果等,詳情見備註 "filter" : { // 過濾條件 "age" : { "$gt" : 9990 } }, "direction" : "forward" //方向forward }, "rejectedPlans" : [ ] //拒絕的執行計劃 }, "executionStats" : { //執行計劃信息 "executionSuccess" : true, //執行成功的狀態 "nReturned" : 9, //返回結果集數目 "executionTimeMillis" : 2, //執行時間,毫秒 "totalKeysExamined" : 0, //索引掃描條目 "totalDocsExamined" : 10004, //文檔掃描條目 "executionStages" : { "stage" : "COLLSCAN", //略,同queryPlanner的winningPlan "filter" : { "age" : { "$gt" : 9990 } }, "nReturned" : 9, //返回結果集數目 "executionTimeMillisEstimate" : 0, //預估的執行時間,毫秒 "works" : 10006, //工作單元數 "advanced" : 9, //返回的中間結果數 "needTime" : 9996, "needYield" : 0, "saveState" : 78, "restoreState" : 78, "isEOF" : 1, "invalidates" : 0, "direction" : "forward", //方向 "docsExamined" : 10004 //文檔掃描數 } }, "serverInfo" : { "host" : "fatale", "port" : 27017, "version" : "3.6.7-14-g7f3489f445", "gitVersion" : "7f3489f445318e468be4534d7e5eedced033d9a3" }, "ok" : 1 }
備註:
stage:掃描方式可出現的參數如下
collscan,ixscan,fetch,shard_merge,sort,limit,skip,idhack,sharding_filter,count,countscan,count_scan,subpla,text,projection;
不希望看到:collscan(全表掃),sort(使用sort但是無index),skip,subpla(未用到index的$or)
希望看到的:IXSCAN 索引掃描,FETCH 根索引去檢索文檔
mongodb(2)mongodb提升