Indexing을 하면 쿼리 조회 시간을 줄여주지만, 삽입/삭제/수정 작업 시마다 Index 데이터에도 변경이 필요하기 때문에 부하가 늘어남
Index의 크기가 MongoDB에 할당된 RAM 의 크기를 넘게 되어 Disk(SSD, HDD)에까지 Index를 저장하게 되면, 작업 속도가 느려질 수 있음
MongoDB가 할당하는 RAM 용량 계산 방법(Default 값)
(1) (호스트 머신의 RAM 용량 - 1GB) / 2
(2) (1)의 값이 256MB보다 작은 경우 : 256MB
특정 콜렉션의 인덱스 크기를 구하는 방법
(1) 호스트 머신에서 mongod 콘솔 접속
(2) var stats = db.{콜렉션}.stats({indexDetails:true}) 입력
(3) stats.indexDetails 결과로 나온 정보 중 ‘cache’의 ‘bytes currently in the cache’ 확인
db.getCollection("testCollection01").find({}).explain()
"explainVersion" : "2",
"queryPlanner" : {
"namespace" : "testDB.testCollection01",
"indexFilterSet" : false,
"parsedQuery" : {
},
"queryHash" : "E475932B",
"planCacheKey" : "E9553396",
"maxIndexedOrSolutionsReached" : false,
"maxIndexedAndSolutionsReached" : false,
"maxScansToExplodeReached" : false,
"winningPlan" : {
"queryPlan" : {
"stage" : "COLLSCAN",
"planNodeId" : 1.0,
"filter" : {
},
"direction" : "forward"
},
"slotBasedPlan" : {
"slots" : "$$RESULT=s4 env: { s2 = Nothing (SEARCH_META), s1 = TimeZoneDatabase(Pacific/Niue...MST7MDT) (timeZoneDB), s3 = 1713606949659 (NOW) }",
"stages" : "[1] scan s4 s5 none none none none lowPriority [] @\"d0048750-113c-4499-93f2-141020126166\" true false "
}
},
"rejectedPlans" : [
]
},
"command" : {
"find" : "testCollection01",
"filter" : {
},
"$db" : "testDB"
},
"serverInfo" : {
"host" : "DESKTOP-U9HQ4VK",
"port" : 27017.0,
"version" : "7.0.3",
"gitVersion" : "b96efb7e0cf6134d5938de8a94c37cec3f22cff4"
},
"serverParameters" : {
"internalQueryFacetBufferSizeBytes" : 104857600.0,
"internalQueryFacetMaxOutputDocSizeBytes" : 104857600.0,
"internalLookupStageIntermediateDocumentMaxSizeBytes" : 104857600.0,
"internalDocumentSourceGroupMaxMemoryBytes" : 104857600.0,
"internalQueryMaxBlockingSortMemoryUsageBytes" : 104857600.0,
"internalQueryProhibitBlockingMergeOnMongoS" : 0.0,
"internalQueryMaxAddToSetBytes" : 104857600.0,
"internalDocumentSourceSetWindowFieldsMaxMemoryBytes" : 104857600.0,
"internalQueryFrameworkControl" : "trySbeEngine"
},
"ok" : 1.0
}
db.getCollection("testCollection01").find({}).hint({size: 1}).explain();
참고: