Mongodb 稀疏索引 sparse

本文详细介绍了在数据库中创建索引的过程,并解释了唯一索引和sparse属性的作用,如何避免在插入null值时出现错误。

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

创建索引

db.good.ensureIndex({"goodId": 1}, {"unique": true,"sparse":true});

作用

我们知道,唯一索引只允许一条索引字段为空的记录存在,之后就不允许插入了。再次插入 goodId 为 null 的记录时会报错:

E11000 duplicate key error index: dup key: { : null };

“sparse”的作用就是当 goodId 在文档中不存在,或为空值,则不进入索引,从而避免上述问题。

### MongoDB 索引的创建、使用与优化 #### 创建索引MongoDB 中,可以通过 `createIndex` 方法来创建各种类型的索引。以下是几种常见的索引类型及其用途: - **单字段索引** 单字段索引是最基本的索引形式,适用于单一字段上的查询操作。例如,在 `name` 字段上创建升序索引: ```javascript db.collection.createIndex({ "name": 1 }); ``` - **复合索引** 复合索引涉及多个字段,能够加速基于这些字段组合的查询。例如,为 `firstName` 和 `lastName` 同时创建索引: ```javascript db.collection.createIndex({ "firstName": 1, "lastName": -1 }); ``` 这种方式特别适合多条件过滤场景。 - **TTL 索引** 时间戳型数据可通过 TTL(Time To Live)索引实现自动过期删除功能[^2]。例如,设置日志记录保留时间为 7 天: ```javascript db.logs.createIndex({ "createdAt": 1 }, { expireAfterSeconds: 60 * 60 * 24 * 7 }); ``` - **稀疏索引** 当某些文档缺少特定字段时,可利用稀疏索引来减少存储开销并提高性能[^3]。例如,仅针对存在 `middleName` 的文档建立索引: ```javascript db.person.createIndex({ "middleName": 1 }, { sparse: true }); ``` - **文本索引** 文本索引支持全文检索能力,允许用户执行模糊匹配查询。启用前需确保数据库已配置分词器规则。 ```javascript db.articles.createIndex({ "$**": "text" }); // 对所有字符串字段启用文本索引 ``` #### 默认索引 `_id` 每个集合都会自动生成唯一的 `_id` 索引作为主键标识符。此索引不可修改或移除,默认采用 B-tree 结构存储以保障快速查找定位。 #### 索引管理与优化建议 为了充分发挥索引效能,应遵循以下原则: - 定期分析慢查询日志,识别未命中现有索引的操作; - 避免过度依赖复杂嵌套结构设计模式,简化路径表达式利于引擎解析; - 控制总数量规模以防内存占用过高影响整体表现; - 借助工具如 `explain()` 输出计划详情评估实际效果差异。 ```javascript db.collection.find().explain("executionStats"); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值