深入学习MongoDB之索引与执行计划

mongodb索引
创建索引:
db.getCollection("test").ensureIndex({"name":1});
或者db.getCollection("test").createIndex({"name":1});

{
    "raw" : {
        "shard3/192.168.3.18:20004,192.168.3.3:10004" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1.0,
            "$gleStats" : {
                "lastOpTime" : Timestamp(6577988859047444, 1),
                "electionId" : ObjectId("5b48c90f0000000000001c96")
            }
        }
    },
    "ok" : 1.0
}
索引创建成功;

查询索引状态
db.getCollection("test").getIndexes({"name":1});

[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "dev.test"
    },
    {
        "v" : 1,
        "key" : {
            "name" : 1.0
        },
        "name" : "name_1",
        "ns" : "dev.test"
    }
]

可以看到_id索引(默认的),和name索引

删除索引
db.getCollection("test").dropIndex({"name":1});
删除结果
{
    "raw" : {
        "shard3/192.168.3.18:20004,192.168.3.3:10004" : {
            "nIndexesWas" : 2,
            "ok" : 1.0,
            "$gleStats" : {
                "lastOpTime" : Timestamp(6577989129630384, 1),
                "electionId" : ObjectId("5b48c90f0000000000001c96")
            }
        }
    },
    "ok" : 1.0
}

再次查询
db.getCollection("test").getIndexes({"name":1});
[
    {
        "v" : 1,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "dev.test"
    }
]

索引删除成功;

再次创建索引,并查看执行计划;
db.getCollection("test").ensureIndex({"name":1});
db.getCollection("test").find({name:"张三"}).explain();
{
    "queryPlanner" : {
        "mongosPlannerVersion" : 1,
        "winningPlan" : {
            "stage" : "SINGLE_SHARD",
            "shards" : [
                {
                    "shardName" : "shard3",
                    "connectionString" : "shard3/192.168.3.18:20004,192.168.3.3:10004",
                    "serverInfo" : {
                        "host" : "8ef2e84b1b94",
                        "port" : 27017,
                        "version" : "3.2.0",
                        "gitVersion" : "45d947729a0315accb6d4f15a6b06be6d9c19fe7"
                    },
                    "plannerVersion" : 1,
                    "namespace" : "dev.test",
                    "indexFilterSet" : false,
                    "parsedQuery" : {
                        "name" : {
                            "$eq" : "张三"
                        }
                    },
                    "winningPlan" : {
                        "stage" : "FETCH",
                        "inputStage" : {
                            "stage" : "IXSCAN",
                            "keyPattern" : {
                                "name" : 1.0
                            },

                            "indexName" : "name_1",
                            "isMultiKey" : false,
                            "isUnique" : false,
                            "isSparse" : false,
                            "isPartial" : false,
                            "indexVersion" : 1,
              
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值