当前位置:Gxlcms > 数据库问题 > Mongodb查看执行计划和强制索引策略

Mongodb查看执行计划和强制索引策略

时间:2021-07-01 10:21:17 帮助过:27人阅读

  • > db.person.ensureIndex({age:1});
  • {
  •    "createdCollectionAutomatically" : false,
  •    "numIndexesBefore" : 1,
  •    "numIndexesAfter" : 2,
  •    "ok" : 1
  • }
  • > db.person.getIndexes();
  • [
  •    {
  •       "v" : 1,
  •       "key" : {
  •          "_id" : 1
  •       },
  •       "name" : "_id_",
  •       "ns" : "mydb.person"
  •    },
  •    {
  •       "v" : 1,
  •       "key" : {
  •          "age" : 1
  •       },
  •       "name" : "age_1",
  •       "ns" : "mydb.person"
  •    }
  • ]
  • 查看执行计划 indexBounds可以看到走了age的索引
  • > db.person.find({age:30}).explain();
  • {
  •    "queryPlanner" : {
  •       "plannerVersion" : 1,
  •       "namespace" : "mydb.person",
  •       "indexFilterSet" : false,
  •       "parsedQuery" : {
  •          "age" : {
  •             "$eq" : 30
  •          }
  •       },
  •       "winningPlan" : {
  •          "stage" : "FETCH",
  •          "inputStage" : {
  •             "stage" : "IXSCAN",
  •             "keyPattern" : {
  •                "age" : 1
  •             },
  •             "indexName" : "age_1",
  •             "isMultiKey" : false,
  •             "direction" : "forward",
  •             "indexBounds" : {
  •                "age" : [
  •                   "[30.0, 30.0]"
  •                ]
  •             }
  •          }
  •       },
  •       "rejectedPlans" : [ ]
  •    },
  •    "serverInfo" : {
  •       "host" : "localhost.localdomain",
  •       "port" : 27017,
  •       "version" : "3.0.6",
  •       "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
  •    },
  •    "ok" : 1
  • }
  • 没有走索引的计划是这样的
  • > db.person.find({name:‘zjf‘}).explain();
  • {
  •    "queryPlanner" : {
  •       "plannerVersion" : 1,
  •       "namespace" : "mydb.person",
  •       "indexFilterSet" : false,
  •       "parsedQuery" : {
  •          "name" : {
  •             "$eq" : "zjf"
  •          }
  •       },
  •       "winningPlan" : {
  •          "stage" : "COLLSCAN",
  •          "filter" : {
  •             "name" : {
  •                "$eq" : "zjf"
  •             }
  •          },
  •          "direction" : "forward"
  •       },
  •       "rejectedPlans" : [ ]
  •    },
  •    "serverInfo" : {
  •       "host" : "localhost.localdomain",
  •       "port" : 27017,
  •       "version" : "3.0.6",
  •       "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
  •    },
  •    "ok" : 1
  • }
  • 强制索引 hint()方法:

    1. > db.person.ensureIndex({name:1,age:1});
    2. {
    3.    "createdCollectionAutomatically" : false,
    4.    "numIndexesBefore" : 3,
    5.    "numIndexesAfter" : 4,
    6.    "ok" : 1
    7. }
    8. > db.person.getIndexes();
    9. [
    10.    {
    11.       "v" : 1,
    12.       "key" : {
    13.          "_id" : 1
    14.       },
    15.       "name" : "_id_",
    16.       "ns" : "mydb.person"
    17.    },
    18.    {
    19.       "v" : 1,
    20.       "key" : {
    21.          "age" : 1
    22.       },
    23.       "name" : "age_1",
    24.       "ns" : "mydb.person"
    25.    },
    26.    {
    27.       "v" : 1,
    28.       "key" : {
    29.          "name" : 1
    30.       },
    31.       "name" : "name_1",
    32.       "ns" : "mydb.person"
    33.    },
    34.    {
    35.       "v" : 1,
    36.       "key" : {
    37.          "name" : 1,
    38.          "age" : 1
    39.       },
    40.       "name" : "name_1_age_1",
    41.       "ns" : "mydb.person"
    42.    }
    43. ]
    44. //如果不加hint 默认走age上的索引。
    45. > db.person.find({age:{$gt:0}}).explain();
    46. {
    47.    "queryPlanner" : {
    48.       "plannerVersion" : 1,
    49.       "namespace" : "mydb.person",
    50.       "indexFilterSet" : false,
    51.       "parsedQuery" : {
    52.          "age" : {
    53.             "$gt" : 0
    54.          }
    55.       },
    56.       "winningPlan" : {
    57.          "stage" : "FETCH",
    58.          "inputStage" : {
    59.             "stage" : "IXSCAN",
    60.             "keyPattern" : {
    61.                "age" : 1
    62.             },
    63.             "indexName" : "age_1",
    64.             "isMultiKey" : false,
    65.             "direction" : "forward",
    66.             "indexBounds" : {
    67.                "age" : [
    68.                   "(0.0, inf.0]"
    69.                ]
    70.             }
    71.          }
    72.       },
    73.       "rejectedPlans" : [ ]
    74.    },
    75.    "serverInfo" : {
    76.       "host" : "localhost.localdomain",
    77.       "port" : 27017,
    78.       "version" : "3.0.6",
    79.       "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
    80.    },
    81.    "ok" : 1
    82. }
    83. //使用hint
    84. > db.person.find({age:{$gt:0}}).hint({name:1,age:1}).explain();
    85. {
    86.    "queryPlanner" : {
    87.       "plannerVersion" : 1,
    88.       "namespace" : "mydb.person",
    89.       "indexFilterSet" : false,
    90.       "parsedQuery" : {
    91.          "age" : {
    92.             "$gt" : 0
    93.          }
    94.       },
    95.       "winningPlan" : {
    96.          "stage" : "KEEP_MUTATIONS",
    97.          "inputStage" : {
    98.             "stage" : "FETCH",
    99.             "filter" : {
    100.                "age" : {
    101.                   "$gt" : 0
    102.                }
    103.             },
    104.             "inputStage" : {
    105.                "stage" : "IXSCAN",
    106.                "keyPattern" : {
    107.                   "name" : 1,
    108.                   "age" : 1
    109.                },
    110.                "indexName" : "name_1_age_1",
    111.                "isMultiKey" : false,
    112.                "direction" : "forward",
    113.                "indexBounds" : {
    114.                   "name" : [
    115.                      "[MinKey, MaxKey]"
    116.                   ],
    117.                   "age" : [
    118.                      "[MinKey, MaxKey]"
    119.                   ]
    120.                }
    121.             }
    122.          }
    123.       },
    124.       "rejectedPlans" : [ ]
    125.    },
    126.    "serverInfo" : {
    127.       "host" : "localhost.localdomain",
    128.       "port" : 27017,
    129.       "version" : "3.0.6",
    130.       "gitVersion" : "1ef45a23a4c5e3480ac919b28afcba3c615488f2"
    131.    },
    132.    "ok" : 1
    133. }

    Mongodb查看执行计划和强制索引策略

    标签:key   tin   false   rect   dir   _id   eject   font   direct   

    人气教程排行