记录 MongoDB 添加索引相关命令的使用

类似 MySQL,在使用 MongoDB 时随着集合中数据量的增加,查询效率低,通过添加索引有立竿见影的效果。记录一下通过命令为集合添加索引。

场景:有一个数据集合 api_log 包含 created 字段,在倒序查询时效率低下,计划为字段添加索引。

连接服务进入数据库

使用 mongo 客户端连接 MongoDB 服务,查看数据库进入确认集合。

# 连接 mongo
mongo --host 127.0.0.1 --port 27017

# 查看数据库列表
> show dbs
data_logs 3.765GB

# 切换数据库
> use data_logs
switched to db data_logs

# 查看数据集合
> show collections
api_log
celery_taskmeta

索引查看及创建

查看现有索引,为 created 创建单字段升序索引,其中添加 background: true 配置 MongoDB 会在后台创建索引。这意味着在索引创建期间,集合上的读写操作不会被完全阻塞,而是会在后台逐步完成索引的创建,减小对读写性能的影响。

# 查看集合现有索引
> db.api_log.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "data_logs.api_log"
    },
    {
        "v" : 2,
        "unique" : true,
        "key" : {
            "hash_str" : 1
        },
        "name" : "hash_str_1",
        "ns" : "data_logs.api_log"
    }
]

# 为 created 字段创建单字段升序索引
> db.api_log.createIndex({ created: 1 }, { background: true })

确认创建完成

通过命令确认索引是否创建完成。

# 确认创建索引命令是否执行完成
> db.currentOp({ "command.createIndexes": "api_log" })
{ "inprog" : [ ], "ok" : 1 }

# 查看执行创建索引后的索引
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "data_logs.api_log"
    },
    {
        "v" : 2,
        "unique" : true,
        "key" : {
            "hash_str" : 1
        },
        "name" : "hash_str_1",
        "ns" : "data_logs.api_log"
    },
    {
        "v" : 2,
        "key" : {
            "created" : 1
        },
        "name" : "created_1",
        "ns" : "data_logs.api_log",
        "background" : true
    }
]

除了单字段索引,MongoDB 还包含复合索引,文本索引,地理空间索引,哈希索引等其他形式的索引,具体实现参考 chatgpt

标题:记录 MongoDB 添加索引相关命令的使用

原文链接:https://beltxman.com/4412.html

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top