MongoDB索引创建技巧(一)

索引排序

如果查询程序无法从索引获得排序顺序,就会将结果放在内存中排序,使用排序索引可以提高性能。

mongos> use db3
switched to db db3
mongos> db.test.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "db3.test"
    }
]
mongos> db.test.createIndex({"id":1})
{
    "raw" : {
        "hdshard3/172.16.254.136:40003,172.16.254.137:40003,172.16.254.138:40003" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1
        }
    },
    "ok" : 1,
    "operationTime" : Timestamp(1619588710, 6),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1619588710, 6),
        "signature" : {
            "hash" : BinData(0,"ZBt55smIxPY8IGvKiewLnQ1DbEU="),
            "keyId" : NumberLong("6941260985399246879")
        }
    }
}
  • 1表示升序
  • -1表示降序
    无论使用升序还是降序创建索引,查询都可以在任意方向进行排序。
     

后台创建索引

默认情况下,在某集合上创建索引,会阻塞该数据库上的所有操作,所以创建索引要养成良好的习惯,采用后台创建索引。

mongos> db.test.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "db3.test"
    }
]
mongos> 
mongos> 
mongos> db.test.createIndex({"id":-1},{background:true})
{
    "raw" : {
        "hdshard3/172.16.254.136:40003,172.16.254.137:40003,172.16.254.138:40003" : {
            "createdCollectionAutomatically" : false,
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "ok" : 1
        }
    },
    "ok" : 1,
    "operationTime" : Timestamp(1619589015, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1619589015, 1),
        "signature" : {
            "hash" : BinData(0,"1Ka8dn3XtRLJoZbSX4YW0upmPHU="),
            "keyId" : NumberLong("6941260985399246879")
        }
    }
}
mongos> db.test.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "db3.test"
    },
    {
        "v" : 2,
        "key" : {
            "id" : -1
        },
        "name" : "id_-1",
        "ns" : "db3.test",
        "background" : true
    }
]
上一篇:对已存在集合shardCollection失败


下一篇:php – 如何在Windows上的Symfony2中设置指南针?