{"id":815,"date":"2022-01-06T05:34:16","date_gmt":"2022-01-06T05:34:16","guid":{"rendered":"https:\/\/scrutineer.co.kr\/wordpress\/?p=815"},"modified":"2022-01-06T06:03:07","modified_gmt":"2022-01-06T06:03:07","slug":"%eb%aa%bd%ea%b3%a0-%eb%94%94%eb%b9%84-%ec%9d%b8-%ec%95%a1%ec%85%98-8%ec%9e%a5-2","status":"publish","type":"post","link":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/2022\/01\/06\/%eb%aa%bd%ea%b3%a0-%eb%94%94%eb%b9%84-%ec%9d%b8-%ec%95%a1%ec%85%98-8%ec%9e%a5-2\/","title":{"rendered":"\ubabd\uace0 \ub514\ube44 \uc778 \uc561\uc158 8\uc7a5-2"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\" style=\"font-size:30px\">\ucffc\ub9ac \ucd5c\uc801\ud654<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">[<strong>\ub290\ub9b0 \ucffc\ub9ac \ud0d0\uc9c0]<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc798\ubabb\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uacc4, \ubd80\uc801\ud569\ud55c \ub370\uc774\ud130\ubaa8\ub378, \ubd80\uc871\ud55c \ud558\ub4dc\uc6e8\uc5b4 \ub4f1\uc73c\ub85c \ub290\ub824\uc9c8 \uc218 \uc788\uc73c\ub098 \ucffc\ub9ac \ucd5c\uc801\ud654 \ubc29\ubc95\uc73c\ub85c \uc131\ub2a5 \uac1c\uc120\uac00\ub2a5.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ubd80\ubd84\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ucffc\ub9ac\ub294 100ms \uc774\ub0b4\uc5d0 \uc2e4\ud589\ub418\uc5b4\uc57c \uc548\uc804\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/v2.6 log\nMon Sep 30 21:48:58.066 [conn20] query stocks.values query: { query: {\r\nstock_symbol: \"GOOG\" }, orderby: { date: -1.0 } }\r\n ntoreturn:1 ntoskip:0 nscanned:4308303 scanAndOrder:1 keyUpdates:0\r\nnumYields: 3 locks(micros) r:4399440\r\n nreturned:1 reslen:194 4011ms\n\n\/\/v3.0 log\n2015-09-11T21:17:15.414+0300 I COMMAND [conn99] command green.$cmd command:\r\ninsert { insert: \"system.indexes\", documents: [ { _id:\r\nObjectId('55f31aab9a50479be0a7dcd7'), ns: \"green.users\", key: {\r\naddresses.zip: 1.0 }, name: \"zip\" } ], ordered: false } keyUpdates:0\r\nwriteConflicts:0 numYields:0 reslen:40 locks:{ Global: { acquireCount: { r:\r\n1, w: 1 } }, MMAPV1Journal: { acquireCount: { w: 9 } }, Database: {\r\nacquireCount: { W: 1 } }, Collection: { acquireCount: { W: 1 } }, Metadata: {\r\nacquireCount: { W: 5 } } } 102ms<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub290\ub9b0 \ucffc\ub9ac \uacbd\uace0 \uba54\uc2dc\uc9c0 : stocks.values\uc5d0 \ub300\ud55c \ucffc\ub9ac, \uc815\ub82c\uc774 \uc218\ud589, \uc2e4\ud589\ud558\ub294\ub370 4\ucd08 \uac78\ub9bc<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">grep -E '[0-9]+ms' mongod.log<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\ub2f9 \uacbd\uace0 \ub85c\uadf8\ub97c grep\ud558\ub294 \uba85\ub839\uc5b4<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\ud504\ub85c\ud30c\uc77c\ub7ec \uc0ac\uc6a9<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/\ub514\ud3f4\ud2b8\ub85c \uc0ac\uc6a9 \ubd88\uac00\ub2a5\uc778 \uc0c1\ud0dc\uc774\ubbc0\ub85c \uc0c1\ud0dc \uac00\ub2a5\uc73c\ub85c \ubcc0\uacbd &lt;-> \ubd88\uac00\ub2a5\uc740 \ub808\ubca80\n\/\/\ud2b9\uc815 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc120\ud0dd \ubc0f \ud504\ub85c\ud30c\uc77c\ub9c1 \uc218\uc900 \uc9c0\uc815 (\uc77d\uae30, \uc4f0\uae30\ub97c \ub85c\uadf8 \uae30\ub85d)\nuse stocks\r\ndb.setProfilingLevel(2)\n\n\/\/150\ubc00\ub9ac\ucd08 \uc774\uc0c1\uc774 \uc18c\uc694\ub41c \ucffc\ub9ac \uc870\ud68c\ndb.system.profile.find({millis: {$gt: 150}})\ndb.system.profile.find().sort({$natural: -1}).limit(5).pretty()\n\n\/\/ \ucd9c\ub825 \uacb0\uacfc\n{\r\n \"op\" : \"query\",\r\n \"ns\" : \"stocks.values\",  \/\/\uceec\ub809\uc158\uc758 \uc774\ub984\r\n \"query\" : {\r\n \"query\" : { },\r\n \"orderby\" : {\r\n \"close\" : -1\r\n }\r\n },\r\n \"ntoreturn\" : 1,\r\n \"ntoskip\" : 0,\r\n \"nscanned\" : 4308303, \/\/\uc2a4\uce94\ub41c \ub3c4\ud050\uba3c\ud2b8 \uc218\r\n \"scanAndOrder\" : true,\r\n \"keyUpdates\" : 0,\r\n \"numYield\" : 3,\r\n \"lockStats\" : {\r\n \"timeLockedMicros\" : {\r\n \"r\" : NumberLong(12868747),\r\n \"w\" : NumberLong(0)\r\n },\n\"timeAcquiringMicros\" : {\r\n \"r\" : NumberLong(1838271),\r\n \"w\" : NumberLong(5)\r\n }\r\n },\r\n \"nreturned\" : 1, \/\/\ubc18\ud658\ub41c \ub3c4\ud050\uba3c\ud2b8 \uc218\r\n \"responseLength\" : 194,\r\n \"millis\" : 11030, \/\/\uc751\ub2f5\uc18d\ub3c4 \ubc00\ub9ac\ucd08 \ub2e8\uc704\r\n \"ts\" : ISODate(\"2013-09-30T06:44:40.988Z\"),\r\n \"client\" : \"127.0.0.1\",\r\n \"allUsers\" : [ ],\r\n \"user\" : \"\"\r\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\ub290\ub9b0 \ucffc\ub9ac \ubd84\uc11d : \uc778\ub371\uc2a4 \ucd94\uac00, \uc778\ub371\uc2a4 \uc7ac\uad6c\uc131 \ubc0f \ub370\uc774\ud130 \ubaa8\ub378 \uc218\uc815<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ explain \uc0ac\uc6a9\ndb.values.find({}).sort({close: -1}).limit(1).explain()\r\n{\r\n \"cursor\" : \"BasicCursor\", \/\/\uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud588\ub2e4\uba74 BtreeCursor\r\n \"isMultiKey\" : false,\r\n \"n\" : 1, \/\/\ubc18\ud658\ub41c \uc218\r\n \"nscannedObjects\" : 4308303,\r\n \"nscanned\" : 4308303, \/\/\uc2a4\uce94\ub41c \uc218\r\n \"nscannedObjectsAllPlans\" : 4308303,\r\n \"nscannedAllPlans\" : 4308303,\r\n \"scanAndOrder\" : true,\r\n \"indexOnly\" : false,\r\n \"nYields\" : 4,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 10927, \/\/ 11\ucd08 \uc18c\uc694\r\n \"indexBounds\" : { },\r\n \"server\" : \"localhost:27017\"\r\n}\n\/\/values \uceec\ub809\uc158 count\ndb.values.count()\r\n4308303\n\n\/\/\uceec\ub809\uc158 \uc804\uccb4 \uc2a4\uce94, n\uacfc nscanned\uac00 \uac70\uc758 \ube44\uc2b7\ud55c \uac12\uc744 \uac00\uc9c0\ub294\uac8c \uc774\uc0c1\uc801\n\n\/\/v3.0 \uc0d8\ud50c\n> db.inventory.find({}).sort({\"quantity\": -1}).limit(1).\r\nexplain(\"executionStats\")\r\n{\r\n \"queryPlanner\" : {\r\n \"plannerVersion\" : 1,\r\n \"namespace\" : \"tutorial.inventory\",\r\n \"indexFilterSet\" : false,\r\n \"parsedQuery\" : {\r\n \"$and\" : [ ]\r\n },\r\n \"winningPlan\" : {\r\n \"stage\" : \"SORT\",\r\n \"sortPattern\" : {\r\n \"quantity\" : -1\r\n },\r\n \"limitAmount\" : 1,\r\n \"inputStage\" : {\r\n \"stage\" : \"COLLSCAN\",\r\n \"filter\" : {\r\n \"$and\" : [ ]\r\n },\r\n \"direction\" : \"forward\"\r\n }\r\n },\r\n \"rejectedPlans\" : [ ]\r\n },\r\n \"executionStats\" : {\r\n \"executionSuccess\" : true,\r\n \"nReturned\" : 1,\r\n \"executionTimeMillis\" : 0,\r\n \"totalKeysExamined\" : 0,\r\n \"totalDocsExamined\" : 11,\r\n \"executionStages\" : {\r\n \"stage\" : \"SORT\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 16,\r\n \"advanced\" : 1,\r\n \"needTime\" : 13,\r\n \"needFetch\" : 0,\n\"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"sortPattern\" : {\r\n \"quantity\" : -1\r\n },\r\n \"memUsage\" : 72,\r\n \"memLimit\" : 33554432,\r\n \"limitAmount\" : 1,\r\n \"inputStage\" : {\r\n \"stage\" : \"COLLSCAN\",\r\n \"filter\" : {\r\n \"$and\" : [ ]\r\n },\r\n \"nReturned\" : 11,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 13,\r\n \"advanced\" : 11,\r\n \"needTime\" : 1,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"direction\" : \"forward\",\r\n \"docsExamined\" : 11\r\n }\r\n }\r\n },\r\n \"serverInfo\" : {\r\n \"host\" : \"rMacBook.local\",\r\n \"port\" : 27017,\r\n \"version\" : \"3.0.6\",\r\n \"gitVersion\" : \"nogitversion\"\r\n },\r\n \"ok\" : 1\r\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\uc778\ub371\uc2a4 \ucd94\uac00 \ud6c4 \uc7ac\uc2dc\ub3c4<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/\uc778\ub371\uc2a4 \uc0dd\uc131\ndb.values.createIndex({close: 1})\n\n\/\/explain \uc7ac\uc2e4\ud589\ndb.values.find({}).sort({close: -1}).limit(1).explain()\r\n{\r\n \"cursor\" : \"BtreeCursor close_1 reverse\",\r\n \"isMultiKey\" : false, \n\"n\" : 1,\r\n \"nscannedObjects\" : 1,\r\n \"nscanned\" : 1,\r\n \"nscannedObjectsAllPlans\" : 1,\r\n \"nscannedAllPlans\" : 1,\r\n \"scanAndOrder\" : false,\r\n \"indexOnly\" : false,\r\n \"nYields\" : 0,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 0, \/\/1\ubc00\ub9ac\ucd08\ub3c4 \uc548\uac78\ub9bc\r\n \"indexBounds\" : { \/\/\ucffc\ub9ac\uac00 \uc804\uccb4 \uc778\ub371\uc2a4\uc5d0 \ub300\ud55c \uac83\uc784\uc744 \ub098\ud0c0\ub0c4\r\n \"name\" : [\r\n [\r\n {\r\n \"$maxElement\" : 1\r\n },\r\n {\r\n \"$minElement\" : 1\r\n }\r\n ]\r\n ]\r\n },\r\n \"server\" : \"localhost:27017\"\r\n} <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\uc778\ub371\uc2f1\ub41c \ud0a4 \uc0ac\uc6a9<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/500\ubcf4\ub2e4 \ud070 \uc885\uac00\uc5d0 \ub300\ud55c \ucffc\ub9ac explain\n> db.values.find({close: {$gt: 500}}).explain()\r\n{\r\n \"cursor\" : \"BtreeCursor close_1\",\r\n \"isMultiKey\" : false,\r\n \"n\" : 309,\r\n \"nscannedObjects\" : 309,\r\n \"nscanned\" : 309,\r\n \"nscannedObjectsAllPlans\" : 309,\r\n \"nscannedAllPlans\" : 309,\r\n \"scanAndOrder\" : false, \n \"indexOnly\" : false,\r\n \"nYields\" : 0,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 1,\r\n \"indexBounds\" : { \/\/\ud558\ud55c\uc120\uc740 500 , \uc0c1\ud55c\uc120\uc740 \ubb34\ud55c\ub300\r\n \"close\" : [\r\n [\r\n 500,\r\n 1.7976931348623157e+308\r\n ]\r\n ]\r\n },\r\n \"server\" : \"localhost:27017\"\r\n} \r<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>MongoDB \ucffc\ub9ac \uc635\ud2f0\ub9c8\uc774\uc800 : \ud574\ub2f9 \ucffc\ub9ac\ub97c \uac00\uc7a5 \ud6a8\uc728\uc801\uc73c\ub85c \uc2e4\ud589\ud558\uae30 \uc704\ud574 \uc5b4\ub5a4 \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud560\uc9c0 \uacb0\uc815\ud558\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4<ul><li>scanAndOrder \ub97c \ud53c\ud55c\ub2e4. \ucffc\ub9ac\uac00 \uc815\ub82c\uc744 \ud3ec\ud568\ud558\uace0 \uc788\uc73c\uba74 \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud55c \uc815\ub82c \uc2dc\ub3c4<\/li><li>\uc720\uc6a9\ud55c \uc778\ub371\uc2a4 \uc81c\ud55c \uc870\uac74\uc73c\ub85c \ubaa8\ub4e0 \ud544\ub4dc\ub97c \ub9cc\uc871\uc2dc\ud0a8\ub2e4. \ucffc\ub9ac \uc140\ub809\ud130\uc5d0 \uc9c0\uc815\ub41c \ud544\ub4dc\uc5d0 \ub300\ud55c \uc778\ub371\uc2a4\ub97c \ucd5c\ub300\ud55c \uc0ac\uc6a9<\/li><li>\ucffc\ub9ac\uac00 \ubc94\uc704\ub97c \ub0b4\ud3ec\ud558\uac70\ub098 \uc815\ub82c\uc744 \ud3ec\ud568\ud558\uba74 \ub9c8\uc9c0\ub9c9 \ud0a4\uc5d0 \ub300\ud55c \ubc94\uc704\ub098 \uc815\ub82c\uc5d0 \ub3c4\uc6c0\uc774 \ub418\ub294 \uc778\ub371\uc2a4\ub97c \uc120\ud0dd<\/li><\/ul><\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/GOOG\uc5d0 \ub300\ud574 200\uc774 \ub118\ub294 \uc885\uac00 \uc870\ud68c\ndb.values.find({stock_symbol: \"GOOG\", close: {$gt: 200}})\n\/\/\ub450 \uac1c\uc758 \uc778\ub371\uc2a4 &amp;&amp; close\ud0a4\uac00 \ub9c8\uc9c0\ub9c9\ndb.values.createIndex({stock_symbol: 1, close: 1})\n\ndb.values.find({stock_symbol: \"GOOG\", close: {$gt: 200}}).explain()\r\n{\r\n \"cursor\" : \"BtreeCursor stock_symbol_1_close_1\",\r\n \"isMultiKey\" : false,\r\n \"n\" : 730,\r\n \"nscannedObjects\" : 730,\r\n \"nscanned\" : 730,\r\n \"nscannedObjectsAllPlans\" : 730,\r\n \"nscannedAllPlans\" : 730,\r\n \"scanAndOrder\" : false,\r\n \"indexOnly\" : false,\r\n \"nYields\" : 0,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 2,\r\n \"indexBounds\" : {\r\n \"stock_symbol\" : [\r\n [\r\n \"GOOG\",\r\n \"GOOG\"\r\n ]\r\n ],\r\n \"close\" : [\r\n [\r\n 200,\r\n 1.7976931348623157e+308\r\n ]\r\n ]\r\n },\r\n \"server\" : \"localhost:27017\"\r\n}\n\/\/ \uc778\ub371\uc2a4\ub97c \ub098\uc6a9\ud558\uae30 \uc704\ud574 \ucd95\uc57d\ub41c getIndexKeys() \uc0ac\uc6a9\ndb.values.getIndexKeys()\r\n[\r\n {\r\n \"_id\" : 1\r\n },\r\n {\r\n \"close\" : 1\r\n },\r\n {\r\n \"stock_symbol\" : 1\r\n }\r\n]<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">> db.inventory.find({\"quantity\": 500,\r\n\"type\":\"toys\"}).limit(1).explain(\"executionStats\")\r\n{\r\n \"queryPlanner\" : {\r\n \"plannerVersion\" : 1,\r\n \"namespace\" : \"tutorial.inventory\",\r\n \"indexFilterSet\" : false,\r\n \"parsedQuery\" : {\r\n \"$and\" : [\r\n {\r\n \"quantity\" : {\r\n \"$eq\" : 500\r\n }\r\n },\n{\r\n \"type\" : {\r\n \"$eq\" : \"toys\"\r\n }\r\n }\r\n ]\r\n },\r\n \"winningPlan\" : {\r\n \"stage\" : \"LIMIT\",\r\n \"limitAmount\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"KEEP_MUTATIONS\",\r\n \"inputStage\" : {\r\n \"stage\" : \"FETCH\",\r\n \"filter\" : {\r\n \"type\" : {\r\n \"$eq\" : \"toys\"\r\n }\r\n },\r\n \"inputStage\" : {\r\n \"stage\" : \"IXSCAN\",\r\n \"keyPattern\" : {\r\n \"quantity\" : 1\r\n },\r\n \"indexName\" : \"quantity_1\",\r\n \"isMultiKey\" : false,\r\n \"direction\" : \"forward\",\r\n \"indexBounds\" : {\r\n \"quantity\" : [\r\n \"[500.0, 500.0]\"\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"rejectedPlans\" : [ ]\r\n },\r\n \"executionStats\" : {\r\n \"executionSuccess\" : true,\r\n \"nReturned\" : 1,\r\n \"executionTimeMillis\" : 1,\r\n \"totalKeysExamined\" : 2,\r\n \"totalDocsExamined\" : 2,\r\n \"executionStages\" : {\r\n \"stage\" : \"LIMIT\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 3,\r\n \"advanced\" : 1,\r\n \"needTime\" : 1,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\n\"invalidates\" : 0,\r\n \"limitAmount\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"KEEP_MUTATIONS\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 2,\r\n \"advanced\" : 1,\r\n \"needTime\" : 1,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 0,\r\n \"invalidates\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"FETCH\",\r\n \"filter\" : {\r\n \"type\" : {\r\n \"$eq\" : \"toys\"\r\n }\r\n },\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 2,\r\n \"advanced\" : 1,\r\n \"needTime\" : 1,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"docsExamined\" : 2,\r\n \"alreadyHasObj\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"IXSCAN\",\r\n \"nReturned\" : 2,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 2,\r\n \"advanced\" : 2,\r\n \"needTime\" : 0,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"keyPattern\" : {\r\n \"quantity\" : 1\r\n },\r\n \"indexName\" : \"quantity_1\",\r\n \"isMultiKey\" : false,\r\n \"direction\" : \"forward\",\r\n \"indexBounds\" : {\r\n \"quantity\" : [\r\n \"[500.0, 500.0]\"\r\n ]\n},\r\n \"keysExamined\" : 2,\r\n \"dupsTested\" : 0,\r\n \"dupsDropped\" : 0,\r\n \"seenInvalidated\" : 0,\r\n \"matchTested\" : 0\r\n }\r\n }\r\n }\r\n }\r\n },\r\n \"serverInfo\" : {\r\n \"host\" : \"rMacBook.local\",\r\n \"port\" : 27017,\r\n \"version\" : \"3.0.6\",\r\n \"gitVersion\" : \"nogitversion\"\r\n },\r\n \"ok\" : 1\r\n}\n\n\/\/\uc778\ub371\uc2a4 \ucd94\uac00\n> db.inventory.createIndex( { quantity: 1, type: 1 } )\r\n{\r\n \"createdCollectionAutomatically\" : false,\r\n \"numIndexesBefore\" : 2,\r\n \"numIndexesAfter\" : 3,\r\n \"ok\" : 1\r\n}\n\n> db.inventory.find({\"quantity\": 500,\r\n\"type\":\"toys\"}).limit(1).explain(\"executionStats\")\r\n{\r\n \"queryPlanner\" : {\r\n \"plannerVersion\" : 1,\r\n \"namespace\" : \"tutorial.inventory\",\r\n \"indexFilterSet\" : false,\r\n \"parsedQuery\" : {\r\n \"$and\" : [\r\n {\r\n \"quantity\" : {\r\n \"$eq\" : 500\r\n }\r\n },\r\n {\r\n \"type\" : {\r\n \"$eq\" : \"toys\"\r\n }\r\n }\r\n ]\r\n },\n\"winningPlan\" : {\r\n \"stage\" : \"LIMIT\",\r\n \"limitAmount\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"FETCH\",\r\n \"inputStage\" : {\r\n \"stage\" : \"IXSCAN\",\r\n \"keyPattern\" : {\r\n \"quantity\" : 1,\r\n \"type\" : 1\r\n },\r\n \"indexName\" : \"quantity_1_type_1\",\r\n \"isMultiKey\" : false,\r\n \"direction\" : \"forward\",\r\n \"indexBounds\" : {\r\n \"quantity\" : [\r\n \"[500.0, 500.0]\"\r\n ],\r\n \"type\" : [\r\n \"[\\\"toys\\\", \\\"toys\\\"]\"\r\n ]\r\n }\r\n }\r\n }\r\n },\r\n \"rejectedPlans\" : [\r\n {\r\n \"stage\" : \"LIMIT\",\r\n \"limitAmount\" : 1,\r\n \"inputStage\" : {\r\n \"stage\" : \"KEEP_MUTATIONS\",\r\n \"inputStage\" : {\r\n \"stage\" : \"FETCH\",\r\n \"filter\" : {\r\n \"type\" : {\r\n \"$eq\" : \"toys\"\r\n }\r\n },\r\n \"inputStage\" : {\r\n \"stage\" : \"IXSCAN\",\r\n \"keyPattern\" : {\r\n \"quantity\" : 1\r\n },\r\n \"indexName\" : \"quantity_1\",\r\n \"isMultiKey\" : false,\r\n \"direction\" : \"forward\",\r\n \"indexBounds\" : {\r\n \"quantity\" : [\r\n \"[500.0, 500.0]\"\r\n ]\r\n }\r\n }\r\n }\r\n }\r\n }\n]\r\n },\r\n \"executionStats\" : {\r\n \"executionSuccess\" : true,\r\n \"nReturned\" : 1,\r\n \"executionTimeMillis\" : 1,\r\n \"totalKeysExamined\" : 1,\r\n \"totalDocsExamined\" : 1,\r\n \"executionStages\" : {\r\n \"stage\" : \"LIMIT\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 2,\r\n \"advanced\" : 1,\r\n \"needTime\" : 0,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"limitAmount\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"FETCH\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 1,\r\n \"advanced\" : 1,\r\n \"needTime\" : 0,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"docsExamined\" : 1,\r\n \"alreadyHasObj\" : 0,\r\n \"inputStage\" : {\r\n \"stage\" : \"IXSCAN\",\r\n \"nReturned\" : 1,\r\n \"executionTimeMillisEstimate\" : 0,\r\n \"works\" : 1,\r\n \"advanced\" : 1,\r\n \"needTime\" : 0,\r\n \"needFetch\" : 0,\r\n \"saveState\" : 0,\r\n \"restoreState\" : 0,\r\n \"isEOF\" : 1,\r\n \"invalidates\" : 0,\r\n \"keyPattern\" : {\r\n \"quantity\" : 1,\r\n \"type\" : 1\r\n },\r\n \"indexName\" : \"quantity_1_type_1\",\r\n \"isMultiKey\" : false,\r\n \"direction\" : \"forward\",\r\n \"indexBounds\" : {\n\"quantity\" : [\r\n \"[500.0, 500.0]\"\r\n ],\r\n \"type\" : [\r\n \"[\\\"toys\\\", \\\"toys\\\"]\"\r\n ]\r\n },\r\n \"keysExamined\" : 1,\r\n \"dupsTested\" : 0,\r\n \"dupsDropped\" : 0,\r\n \"seenInvalidated\" : 0,\r\n \"matchTested\" : 0\r\n }\r\n }\r\n }\r\n },\r\n \"serverInfo\" : {\r\n \"host\" : \"rMacBook.local\",\r\n \"port\" : 27017,\r\n \"version\" : \"3.0.6\",\r\n \"gitVersion\" : \"nogitversion\"\r\n },\r\n \"ok\" : 1\r\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\ucffc\ub9ac \ud50c\ub79c\uacfc HINT() \ubcf4\uc5ec\uc8fc\uae30<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/\uae30\uc874 \ubcf5\ud569 \uc778\ub371\uc2a4 \uc0ad\uc81c \ud6c4 \uac1c\ubcc4 \uc778\ud14d\uc2a4 \uc0dd\uc131\ndb.values.dropIndex(\"stock_symbol_1_close_1\")\r\ndb.values.createIndex({stock_symbol: 1})\r\ndb.values.createIndex ({close: 1})\n\n\/\/ true\ub97c \uc804\ub2ec\ud558\ub294 \uac83\uc740 \ucffc\ub9ac \uc635\ud2f0\ub9c8\uc774\uc800\uac00 \uc2dc\ub3c4\ud558\ub294 \ud50c\ub79c\uc758 \ub9ac\uc2a4\ud2b8 \ud3ec\ud568\ndb.values.find({stock_symbol: \"GOOG\", close: {$gt: 200}}).explain(true)\r\n{\r\n \"cursor\" : \"BtreeCursor stock_symbol_1\",\r\n \"isMultiKey\" : false,\r\n \"n\" : 730,\r\n \"nscannedObjects\" : 894,\n \"nscanned\" : 894, \/\/\uc2a4\uce94\ud55c \ub3c4\ud050\uba3c\ud2b8 \uc218\r\n \"nscannedObjectsAllPlans\" : 1097,\r\n \"nscannedAllPlans\" : 1097,\r\n \"scanAndOrder\" : false,\r\n \"indexOnly\" : false,\r\n \"nYields\" : 0,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 4, \/\/\ucffc\ub9ac \uc218\ud589 \uc2dc\uac04\r\n \"indexBounds\" : {\r\n \"stock_symbol\" : [[ \/\/ \uc77c\uce58\ud568(equality)\uc5d0 \ub300\ud55c \uc9c8\uc758\r\n \"GOOG\", \/\/\ub3d9\uc77c\ud55c \uc778\ub371\uc2a4 \ubc94\uc704\r\n \"GOOG\"\r\n ]\r\n ]\r\n },\r\n \"allPlans\" : [ \/\/\uc2dc\ub3c4\ud55c \ucffc\ub9ac \ud50c\ub79c\uc758 \ubc30\uc5f4\r\n {\r\n \"cursor\" : \"BtreeCursor close_1\", \r\n \"n\" : 0,\r\n \"nscannedObjects\" : 102,\r\n \"nscanned\" : 102,\r\n \"indexBounds\" : {\r\n \"close\" : [\r\n [\r\n 200,\r\n 1.7976931348623157e+308\r\n ]\r\n ]\r\n }\r\n },\r\n {\r\n \"cursor\" : \"BtreeCursor stock_symbol_1\",\r\n \"n\" : 730,\r\n \"nscannedObjects\" : 894,\r\n \"nscanned\" : 894,\r\n \"indexBounds\" : {\r\n \"stock_symbol\" : [\r\n [\r\n \"GOOG\",\r\n \"GOOG\"\r\n ]\r\n ]\r\n }\r\n },\r\n {\r\n \"cursor\" : \"BasicCursor\", \/\/BasicCursor\ub97c \uc0ac\uc6a9\ud55c \uceec\ub809\uc158 \uc2a4\uce94\r\n \"n\" : 0,\r\n \"nscannedObjects\" : 101,\r\n \"nscanned\" : 101,\r\n \"indexBounds\" : { }\r\n }\r\n ],\r\n \"server\" : \"localhost:27017\"\r\n}\n\n\/\/close \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uc774\uc720\ub97c \uc54c\uae30\uc704\ud574 hint \uc0ac\uc6a9, hint()\ub294 \ucffc\ub9ac \uc635\ud2f0\ub9c8\uc774\uc800\ub85c \ud558\uc5ec\uae08 \uac15\uc81c\ub85c \ud2b9\uc815 \uc778\ub371\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ub9cc\ub4e6\nquery = {stock_symbol: \"GOOG\", close: {$gt: 200}}\r\ndb.values.find(query).hint({close: 1}).explain()\r\n{\r\n \"cursor\" : \"BtreeCursor close_1\",\r\n \"isMultiKey\" : false,\r\n \"n\" : 730,\r\n \"nscannedObjects\" : 5299,\r\n \"nscanned\" : 5299, \/\/\uc2a4\uce94\ub418\ub294 \uac12\uc774 \ud655\uc5f0\ud788 \ub9ce\uc74c \uc65c?????\r\n \"nscannedObjectsAllPlans\" : 5299,\r\n \"nscannedAllPlans\" : 5299,\r\n \"scanAndOrder\" : false,\r\n \"indexOnly\" : false,\r\n \"nYields\" : 0,\r\n \"nChunkSkips\" : 0,\r\n \"millis\" : 22,\r\n \"indexBounds\" : {\r\n \"close\" : [\r\n [\r\n 200,\r\n 1.7976931348623157e+308\r\n ]\r\n ]\r\n },\r\n \"server\" : \"localhost:27017\"\r\n} <\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>\ucffc\ub9ac \ud50c\ub79c \uce90\uc2dc : \uc635\ud2f0\ub9c8\uc774\uc800\uac00 \uc5b4\ub5bb\uac8c \uce90\uc2dc\ub97c \ud558\uace0 \uc120\ud0dd\ud55c \ucffc\ub9ac \ud50c\ub79c\uc758 \uc0ac\ud6a8\ub97c \ub9cc\ub8cc\ud558\ub294\uac00\uc758 \ub0b4\uc6a9.<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">{\r\n pattern: {\r\n stock_symbol: 'equality',\r\n close: 'bound',\nindex: {\r\n stock_symbol: 1\r\n },\r\n nscanned: 894\r\n }\r\n}\r<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ucffc\ub9ac \ucd5c\uc801\ud654 [\ub290\ub9b0 \ucffc\ub9ac \ud0d0\uc9c0] \uc798\ubabb\ub41c \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uacc4, \ubd80\uc801\ud569\ud55c \ub370\uc774\ud130\ubaa8\ub378, \ubd80\uc871\ud55c \ud558\ub4dc\uc6e8\uc5b4 \ub4f1\uc73c\ub85c \ub290\ub824\uc9c8 \uc218 \uc788\uc73c\ub098 \ucffc\ub9ac \ucd5c\uc801\ud654 \ubc29\ubc95\uc73c\ub85c \uc131\ub2a5 \uac1c\uc120\uac00\ub2a5. \ub300\ubd80\ubd84\uc758 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \ucffc\ub9ac\ub294 100ms \uc774\ub0b4\uc5d0 \uc2e4\ud589\ub418\uc5b4\uc57c \uc548\uc804\ud55c\ub2e4. \ub290\ub9b0 \ucffc\ub9ac \uacbd\uace0 \uba54\uc2dc\uc9c0 : stocks.values\uc5d0 \ub300\ud55c \ucffc\ub9ac, \uc815\ub82c\uc774 \uc218\ud589, \uc2e4\ud589\ud558\ub294\ub370 4\ucd08 \uac78\ub9bc \ud574\ub2f9 \uacbd\uace0 \ub85c\uadf8\ub97c grep\ud558\ub294 \uba85\ub839\uc5b4 \ud504\ub85c\ud30c\uc77c\ub7ec \uc0ac\uc6a9 \ub290\ub9b0 \ucffc\ub9ac \ubd84\uc11d : \uc778\ub371\uc2a4 \ucd94\uac00, \uc778\ub371\uc2a4 &#8230; <a title=\"\ubabd\uace0 \ub514\ube44 \uc778 \uc561\uc158 8\uc7a5-2\" class=\"read-more\" href=\"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/2022\/01\/06\/%eb%aa%bd%ea%b3%a0-%eb%94%94%eb%b9%84-%ec%9d%b8-%ec%95%a1%ec%85%98-8%ec%9e%a5-2\/\" aria-label=\"Read more about \ubabd\uace0 \ub514\ube44 \uc778 \uc561\uc158 8\uc7a5-2\">Read more<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-815","post","type-post","status-publish","format-standard","hentry","category-4"],"_links":{"self":[{"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/815","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=815"}],"version-history":[{"count":3,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/815\/revisions"}],"predecessor-version":[{"id":819,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/815\/revisions\/819"}],"wp:attachment":[{"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/scrutineer.co.kr\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}