下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當前位置:軟件下載吧 > 數據庫 > DB2 > MongoDB入門到進階筆記:05-MongoDB索引查詢與建立 createIndex getIndexes dropIndex 性能優化

          MongoDB入門到進階筆記:05-MongoDB索引查詢與建立 createIndex getIndexes dropIndex 性能優化

          時間:2024-02-08 11:17作者:下載吧人氣:26

          mongodb數據準備
          use shijiange
          for(i=1; i<=500000;i++){
          db.myuser.insert( {name:’mytest’+i, age:i} )
          }
          for(i=1; i<=500000;i++){
          … db.myuser.insert( {name:’mytest’+i, age:i} )
          … }
          WriteResult({ “nInserted” : 1 })
          db.myuser.count()
          500000

          mongodb有慢查詢的概念,默認是超過100ms會記錄慢日志mongodb.log
          db.getProfilingStatus()
          db.getProfilingStatus()
          { “was” : 0, “slowms” : 100, “sampleRate” : 1 }

          查詢age為9999的,查看掃描的行數
          db.myuser.find( {age:9999} )
          db.myuser.find({age:19999})
          { “_id” : ObjectId(“6362396795502fbd5683b9ba”), “name” : “mytest19999”, “age” : 19999 }

          db.myuser.find( {age:9999} ).explain(true)#使用explain可以查看是否全表掃描
          db.myuser.find({age:113399}).explain()
          {
          “explainVersion” : “1”,
          “queryPlanner” : {
          “namespace” : “wygzs.myuser”,
          “indexFilterSet” : false,
          “parsedQuery” : {
          “age” : {
          “$eq” : 113399
          }
          },
          “queryHash” : “3838C5F3”,
          “planCacheKey” : “BB98D80C”,
          “maxIndexedOrSolutionsReached” : false,
          “maxIndexedAndSolutionsReached” : false,
          “maxScansToExplodeReached” : false,
          “winningPlan” : {
          “stage” : “COLLSCAN”, # 表示全表掃描
          “filter” : {
          “age” : {
          “$eq” : 113399
          }
          },
          “direction” : “forward”
          },
          “rejectedPlans” : [ ]
          },
          “command” : {
          “find” : “myuser”,
          “filter” : {
          “age” : 113399
          },
          “$db” : “wygzs”
          },
          “serverInfo” : {
          “host” : “5e7b4039fa6f”,
          “port” : 27017,
          “version” : “5.0.13”,
          “gitVersion” : “cfb7690563a3144d3d1175b3a20c2ec81b662a8f”
          },
          “serverParameters” : {
          “internalQueryFacetBufferSizeBytes” : 104857600,
          “internalQueryFacetMaxOutputDocSizeBytes” : 104857600,
          “internalLookupStageIntermediateDocumentMaxSizeBytes” : 104857600,
          “internalDocumentSourceGroupMaxMemoryBytes” : 104857600,
          “internalQueryMaxBlockingSortMemoryUsageBytes” : 104857600,
          “internalQueryProhibitBlockingMergeOnMongoS” : 0,
          “internalQueryMaxAddToSetBytes” : 104857600,
          “internalDocumentSourceSetWindowFieldsMaxMemoryBytes” : 104857600
          },
          “ok” : 1
          }

          日志會出現慢日志
          {“t”:{“$date”:”2022-11-02T09:41:00.284+00:00″},”s”:”I”, “c”:”COMMAND”, “id”:51803, “ctx”:”conn5″,”msg”:”Slow query”,”attr”:{“type”:”command”,”ns”:”wygzs.myuser”,”appName”:”MongoDB Shell”,”command”:{“find”:”myuser”,”filter”:{“age”:113399},”lsid”:{“id”:{“$uuid”:”ac26a8d3-1132-4d39-b35c-b770b70eb2b1″}},”$db”:”wygzs”},”planSummary”:”COLLSCAN”,”keysExamined”:0,”docsExamined”:500000,”cursorExhausted”:true,”numYields”:500,”nreturned”:1,”queryHash”:”3838C5F3″,”planCacheKey”:”BB98D80C”,”reslen”:162,”locks”:{“FeatureCompatibilityVersion”:{“acquireCount”:{“r”:501}},”Global”:{“acquireCount”:{“r”:501}},”Mutex”:{“acquireCount”:{“r”:1}}},”storage”:{},”remote”:”127.0.0.1:49802″,”protocol”:”op_msg”,”durationMillis”:157}}

          添加索引,加快查詢
          db.myuser.getIndexes() #獲取當前索引,默認有_id的索引,所以用_id查是比較快
          db.myuser.getIndexes()
          [ { “v” : 2, “key” : { “_id” : 1 }, “name” : “id” } ]

          db.myuser.createIndex( {age:1} ) #增加age的升序索引,默認名稱
          db.myuser.createIndex({age:1})
          {
          “numIndexesBefore” : 1,
          “numIndexesAfter” : 2,
          “createdCollectionAutomatically” : false,
          “ok” : 1
          }

          db.myuser.createIndex({age:1}, {name:”myuser_age”}) ##指定索引名稱
          db.myuser.createIndex({age:1}, {name:”myuser_age”})
          {
          “numIndexesBefore” : 2,
          “numIndexesAfter” : 3,
          “createdCollectionAutomatically” : false,
          “commitQuorum” : “votingMembers”,
          “ok” : 1,
          “$clusterTime” : {
          “clusterTime” : Timestamp(1667394028, 7),
          “signature” : {
          “hash” : BinData(0,”AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
          “keyId” : NumberLong(0)
          }
          },
          “operationTime” : Timestamp(1667394028, 7)
          }

          db.myuser.getIndexes()
          db.myuser.getIndexes()
          [
          {
          “v” : 2,
          “key” : {
          “_id” : 1
          },
          “name” : “id”
          },
          {
          “v” : 2,
          “key” : {
          “age” : 1
          },
          “name” : “age_1”
          }
          ]

          db.myuser.find( {age:9999} )
          db.myuser.find( {age:9999} ).explain(true)
          db.myuser.find({age:19999}).explain(true)
          {
          “explainVersion” : “1”,
          “queryPlanner” : {
          “namespace” : “wygzs.myuser”,
          “indexFilterSet” : false,
          “parsedQuery” : {
          “age” : {
          “$eq” : 19999
          }
          },
          “maxIndexedOrSolutionsReached” : false,
          “maxIndexedAndSolutionsReached” : false,
          “maxScansToExplodeReached” : false,
          “winningPlan” : {
          “stage” : “FETCH”,
          “inputStage” : {
          “stage” : “IXSCAN”,
          “keyPattern” : {
          “age” : 1
          },
          “indexName” : “age_1”,
          “isMultiKey” : false,
          “multiKeyPaths” : {
          “age” : [ ]
          },
          “isUnique” : false,
          “isSparse” : false,
          “isPartial” : false,
          “indexVersion” : 2,
          “direction” : “forward”,
          “indexBounds” : {
          “age” : [
          “[19999.0, 19999.0]”
          ]
          }
          }
          },
          “rejectedPlans” : [ ]
          },
          “executionStats” : {
          “executionSuccess” : true,
          “nReturned” : 1,
          “executionTimeMillis” : 1,
          “totalKeysExamined” : 1,
          “totalDocsExamined” : 1,
          “executionStages” : {
          “stage” : “FETCH”,
          “nReturned” : 1,
          “executionTimeMillisEstimate” : 0,
          “works” : 2,
          “advanced” : 1,
          “needTime” : 0,
          “needYield” : 0,
          “saveState” : 0,
          “restoreState” : 0,
          “isEOF” : 1,
          “docsExamined” : 1,
          “alreadyHasObj” : 0,
          “inputStage” : {
          “stage” : “IXSCAN”,
          “nReturned” : 1,
          “executionTimeMillisEstimate” : 0,
          “works” : 2,
          “advanced” : 1,
          “needTime” : 0,
          “needYield” : 0,
          “saveState” : 0,
          “restoreState” : 0,
          “isEOF” : 1,
          “keyPattern” : {
          “age” : 1
          },
          “indexName” : “age_1”,
          “isMultiKey” : false,
          “multiKeyPaths” : {
          “age” : [ ]
          },
          “isUnique” : false,
          “isSparse” : false,
          “isPartial” : false,
          “indexVersion” : 2,
          “direction” : “forward”,
          “indexBounds” : {
          “age” : [
          “[19999.0, 19999.0]”
          ]
          },
          “keysExamined” : 1,
          “seeks” : 1,
          “dupsTested” : 0,
          “dupsDropped” : 0
          }
          },
          “allPlansExecution” : [ ]
          },
          “command” : {
          “find” : “myuser”,
          “filter” : {
          “age” : 19999
          },
          “$db” : “wygzs”
          },
          “serverInfo” : {
          “host” : “5e7b4039fa6f”,
          “port” : 27017,
          “version” : “5.0.13”,
          “gitVersion” : “cfb7690563a3144d3d1175b3a20c2ec81b662a8f”
          },
          “serverParameters” : {
          “internalQueryFacetBufferSizeBytes” : 104857600,
          “internalQueryFacetMaxOutputDocSizeBytes” : 104857600,
          “internalLookupStageIntermediateDocumentMaxSizeBytes” : 104857600,
          “internalDocumentSourceGroupMaxMemoryBytes” : 104857600,
          “internalQueryMaxBlockingSortMemoryUsageBytes” : 104857600,
          “internalQueryProhibitBlockingMergeOnMongoS” : 0,
          “internalQueryMaxAddToSetBytes” : 104857600,
          “internalDocumentSourceSetWindowFieldsMaxMemoryBytes” : 104857600
          },
          “ok” : 1
          }

          db.myuser.dropIndex( {age:1} ) #刪除索引
          db.myuser.dropIndex({age:1})
          { “nIndexesWas” : 2, “ok” : 1 }

          db.myuser.dropIndex(“myuser_age”) ## 根據名稱刪除素銀
          db.myuser.dropIndex(“myuser_age”)
          {
          “nIndexesWas” : 3,
          “ok” : 1,
          “$clusterTime” : {
          “clusterTime” : Timestamp(1667394121, 1),
          “signature” : {
          “hash” : BinData(0,”AAAAAAAAAAAAAAAAAAAAAAAAAAA=”),
          “keyId” : NumberLong(0)
          }
          },
          “operationTime” : Timestamp(1667394121, 1)
          }

          使用正則的話,索引無效果
          db.myuser.find( {“name”:”mytest1″} )
          db.myuser.createIndex( {name:1} )#添加索引
          db.myuser.createIndex({name:1})
          {
          “numIndexesBefore” : 1,
          “numIndexesAfter” : 2,
          “createdCollectionAutomatically” : false,
          “ok” : 1
          }
          db.myuser.getIndexes()
          [
          {
          “v” : 2,
          “key” : {
          “_id” : 1
          },
          “name” : “id”
          },
          {
          “v” : 2,
          “key” : {
          “name” : 1
          },
          “name” : “name_1”
          }
          ]

          db.myuser.find( {“name”:”mytest6″} )
          db.myuser.find( {“name”:/99999/} )
          db.myuser.find( {“name”:/99999/} ).explain(true)#使用正則,全表掃描,也是慢

          mongodb建立唯一索引,唯一索引對應的值不能重復
          use shijiange
          db.myuser.insert( {userid:1} )
          db.myuser.insert( {userid:1} )

          db.myuser.drop()
          true
          db.myuser.insert( {userid:1} )
          WriteResult({ “nInserted” : 1 })
          db.myuser.insert( {userid:1} )
          WriteResult({ “nInserted” : 1 })
          db.myuser.createIndex({userid:1},{unique:true})
          有重復數據,不能創建唯一索引
          db.myuser.createIndex({userid:1},{unique:true})
          {
          “ok” : 0,
          “errmsg” : “Index build failed: 26986ed4-2f8a-4bf8-84b9-c8349cf3a85d: Collection wygzs.myuser ( 3bff5780-8e8d-43f2-afe4-300b112f4ef5 ) :: caused by :: E11000 duplicate key error collection: wygzs.myuser index: userid_1 dup key: { userid: 1.0 }”,
          “code” : 11000,
          “codeName” : “DuplicateKey”,
          “keyPattern” : {
          “userid” : 1
          },
          “keyValue” : {
          “userid” : 1
          }

          db.myuser.remove({}) #清空數據
          db.myuser.ensureIndex( {userid:1},{unique:true} ) #創建唯一索引
          db.myuser.insert( {userid:1} )
          db.myuser.insert( {userid:2} )
          db.myuser.insert( {userid:1} ) #因為是唯一索引,所以會報錯
          db.myuser.insert( {userid:1} )
          WriteResult({ “nInserted” : 1 })
          db.myuser.insert( {userid:2} )
          WriteResult({ “nInserted” : 1 })
          db.myuser.insert( {userid:1} )
          WriteResult({
          “nInserted” : 0,
          “writeError” : {
          “code” : 11000,
          “errmsg” : “E11000 duplicate key error collection: wygzs.myuser index: userid_1 dup key: { userid: 1.0 }”
          }
          })

          MongoDB入門到進階筆記:05-MongoDB索引查詢與建立 createIndex getIndexes dropIndex 性能優化
          標簽MongoDB,MongoDB優化,學習筆記,技術文檔,數據庫,MongoDB

          相關下載

          查看所有評論+

          網友評論

          網友
          您的評論需要經過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 日本精品高清一区二区| 无码人妻精品一区二区三区66 | 久久精品道一区二区三区| 亚洲乱码av中文一区二区 | 国内精品视频一区二区三区八戒| 无码少妇一区二区三区浪潮AV| 国产精品无圣光一区二区| 亚洲一区二区三区在线播放| 国产不卡视频一区二区三区| 国产精品视频一区二区三区不卡| 视频一区二区三区人妻系列| 亚洲人AV永久一区二区三区久久| 波多野结衣中文一区| 久久精品国产第一区二区| 色妞AV永久一区二区国产AV| 久久se精品动漫一区二区三区| 久久精品岛国av一区二区无码| 中文字幕精品无码一区二区三区| 国精产品一区一区三区| 国产视频一区二区在线播放| 国产成人无码AV一区二区| 日本精品一区二区三区在线观看| 亚洲AV无码一区二区三区DV| 国模私拍福利一区二区| 国产一区二区在线视频播放| 精品国产一区二区22| 久久精品视频一区| 成人精品视频一区二区三区尤物| 精品一区二区三区影院在线午夜| 一区在线免费观看| 亚洲国产精品自在线一区二区| 无码国产精品一区二区免费式影视 | 久久中文字幕一区二区| 一区二区视频在线播放| 亚洲一区二区无码偷拍| 人妻内射一区二区在线视频| 福利一区二区三区视频在线观看 | 香蕉免费一区二区三区| 色综合视频一区二区三区| 亚洲熟妇AV一区二区三区浪潮| 国产亚洲无线码一区二区|