美文网首页mongodb
【mongoDB】mongoDB 稀疏索引

【mongoDB】mongoDB 稀疏索引

作者: Bogon | 来源:发表于2023-04-21 21:14 被阅读0次
> use testDB


> db.testColl.findOne()  
{
        "_id" : ObjectId("643dfcfbf23397002ed07402"),
        "msg" : "2023-04-18 10:14:19.929 | INFO     | __main__:get_scenic_comment:116 - 你好,test,第59页数据成功!",
        "task_id" : "4e0a485a-d7a8-4147-bade-6e1109838ae8",
        "seq" : NumberLong(4310),
        "ts" : ISODate("2023-04-18T02:14:19.929Z"),
        "expire_ts" : ISODate("2023-04-19T02:14:19.929Z")
}



> db. testColl.getIndexes() 
[
        {
                "v" : 2,
                "key" : {
                        "expire_ts" : 1
                },
                "name" : "expire_ts_1",
                "sparse" : true,
                "expireAfterSeconds" : 1
        }
]

这是一个MongoDB的索引,使用了TTL(Time To Live)功能,即过期自动删除功能。

具体解释如下:

  1. "v" : 2:表示该索引是MongoDB的第二个版本,即使用了新的索引存储引擎。

  2. "key" : {"expire_ts" : 1}:表示该索引是基于expire_ts字段创建的,1表示按照升序排序。

  3. "name" : "expire_ts_1":表示该索引的名称,命名规则是字段名_排序方式。

  4. "sparse" : true:表示该索引是稀疏索引,即只包含具有非空expire_ts字段的文档。

  5. "expireAfterSeconds" : 1:表示该索引启用了TTL功能,即该索引会自动删除expire_ts字段值小于当前时间的文档,过期时间为1秒。

综上,该索引是一个基于expire_ts字段的稀疏索引,启用了TTL功能,每隔1秒自动删除expire_ts字段值小于当前时间的文档。
该索引适用于需要自动删除过期数据的场景,比如日志、缓存等。

如何理解MongoDB的稀疏索引?

MongoDB的稀疏索引是一种特殊类型的索引,它只包含具有非空索引字段的文档。如果一个文档缺少索引字段,则该文档不会被添加到稀疏索引中。这种索引通常用于处理稀疏数据集,其中大多数文档缺少某些字段。

稀疏索引可以提高查询性能并减少索引的存储空间。如果数据集中大多数文档缺少某些字段,那么创建一个密集的索引可能会浪费大量的存储空间。稀疏索引只包含具有非空索引字段的文档,因此可以显著减少索引的存储空间。

另外,稀疏索引也可以提高查询性能。如果一个查询需要检索一个缺少索引字段的文档,那么在一个密集的索引中需要扫描所有的文档。而在一个稀疏索引中,只需要扫描具有非空索引字段的文档,因此查询速度更快。

假设有一个存储用户信息的集合,其中大多数用户没有填写电话号码。如果需要查询所有拥有电话号码的用户,可以为电话号码字段创建稀疏索引。

以下是示例代码:

创建稀疏索引:

db.users.createIndex( { phone: 1 }, { sparse: true } )

向集合中添加文档:

db.users.insertMany([
   { name: "Alice", phone: "123-456-7890" },
   { name: "Bob", email: "bob@example.com" },
   { name: "Charlie", phone: "555-555-5555" },
   { name: "Dave", phone: "987-654-3210" },
   { name: "Eve", email: "eve@example.com" },
])

查询所有拥有电话号码的用户:

db.users.find( { phone: { $exists: true } } )

在这个例子中,稀疏索引只包含具有非空电话号码字段的文档。如果没有为电话号码字段创建稀疏索引,查询所有拥有电话号码的用户将需要扫描所有的文档,而稀疏索引可以显著提高查询性能。

总之,MongoDB的稀疏索引是一种特殊类型的索引,它只包含具有非空索引字段的文档。它可以提高查询性能并减少索引的存储空间,特别适用于处理稀疏数据集。

相关文章

  • 24.Mongodb的索引操作

    Mongodb的索引操作 学习目标 掌握 mongodb索引的创建,删除操作 掌握 mongodb查看索引的方法 ...

  • MongoDB索引二(九)

    MongoDB索引二(九) 接上篇MongoDB索引一

  • mongodb索引

    mongodb索引 http://www.runoob.com/mongodb/mongodb-indexing....

  • MongoDB学习报告(二)

    概述 MongoDB索引管理MongoDB查询优化 MongoDB索引管理 单键索引中的每一项都应该对应被索引文档...

  • MongoDB 索引 --- 2022-04-03

    本章介绍MongoDB索引,类似MYSQL,MongoDB也支持索引,区别是MongoDB支持对JSON结构的任意...

  • mongodb 使用参考

    关于mongodb创建索引的一些经验总结(转) MongoDb 数据迁移 MongoDB 更新数据 MongoDB...

  • 128|MongDB 之索引

    https://github.com/qianjiahao/MongoDB/wiki/MongoDB之索引

  • mongo的索引

    MongoDB 索引 createIndex() 方法 MongoDB使用 createIndex() 方法来创建...

  • 【mongoDB】mongoDB组合索引创建

    mongoDB索引创建 testDB库,testColl表索引: 转换为创建语句: 参考 MongoDB 教程ht...

  • MongoDB基础笔记

    outline MongoDB常用命令 MongoDB的CRUD 索引 MongoDB的安装 踩坑记录 Mongo...

网友评论

    本文标题:【mongoDB】mongoDB 稀疏索引

    本文链接:https://www.haomeiwen.com/subject/ayvjjdtx.html