MongoDB复合索引详解

本文详细解析MongoDB的复合索引,探讨如何通过创建复合索引来优化多键查询,以提高数据库查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要: 对于MongoDB的多键查询,创建复合索引可以有效提高性能。

### 什么是复合索引? 复合索引,即**Compound Index**,指的是将多个键组合到一起创建索引,这样可以加速匹配多个键的查询。不妨通过一个简单的示例理解复合索引。 students集合如下:
db.students.find().pretty()
{
    "_id" : ObjectId("5aa7390ca5be7272a99b042a"),
    "name" : "zhang",
    "age" : "15"
}
{
    "_id" : ObjectId("5aa7393ba5be7272a99b042b"),
    "name" : "wang",
    "age" : "15"
}
{
    "_id" : ObjectId("5aa7393ba5be7272a99b042c"),
    "name" : "zhang",
    "age" : "14"
}
在name和age两个键分别创建了索引(_id自带索引):
db.students.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "name" : 1
        },
        "name" : "name_1",
        "ns" : "test.students"
    },
    {
        "v" : 1,
        "key" : {
            "age" : 1
        },
        "name" : "age_1",
        "ns" : "test.students"
    }
]
当进行多键查询时,可以通过[explian()](https://docs.mongodb.com/manual/reference/method/cursor.explain/)分析执行情况(结果仅保留winningPlan):
db.students.find({name:"zhang",age:"14"}).explain()
"winningPlan":
{
    "stage": "FETCH",
    "filter":
    {
        "name":
        {
            "$eq": "zhang"
        }
    },
    "inputStage":
    {
        "stage": "IXSCAN",
        "keyPattern":
        {
            "age": 1
        },
        "indexName": "age_1",
        "isMultiKey": false,
        "isUnique": false,
        "isSparse": false,
        "isPartial": false,
        "indexVersion": 1,
        "direction": "forward",
        "indexBounds":
        {
            "age": [
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值