MongoDB【五】索引

在MongoDB中,索引对于提升查询性能至关重要,特别是针对大型数据集时。以下是如何在MongoDB中创建、查看和删除索引的基本操作,以及不同类型的索引如何影响查询性能。

创建索引

1. 创建单字段索引

  • 升序索引(默认):

    javascript 复制代码
    db.collection.createIndex({ fieldName: 1 }) // 或者 db.collection.ensureIndex({ fieldName: 1 })
  • 降序索引:

    javascript 复制代码
    db.collection.createIndex({ fieldName: -1 })

2. 创建复合索引

javascript 复制代码
db.collection.createIndex({ field1: 1, field2: -1 })

这将创建一个索引,首先按照field1升序,然后在field1相等的情况下按照field2降序。

3. 创建唯一索引

javascript 复制代码
db.collection.createIndex({ fieldName: 1 }, { unique: true })

独特索引确保集合中的字段值唯一,防止重复项。

4. 创建地理空间索引

javascript 复制代码
db.places.createIndex({ location: "2dsphere" })

此索引用于支持地理位置相关的查询,如距离搜索、几何形状内包含点的查找等。

查看索引

  • 列出集合上的所有索引:

    javascript 复制代码
    db.collection.getIndexes()
  • 查看索引大小和其他统计信息:

    javascript 复制代码
    db.collection.totalIndexSize()

删除索引

  • 删除特定索引:

    javascript 复制代码
    db.collection.dropIndex("fieldName_1_fieldName_2") // 根据索引名称删除

    或者

    javascript 复制代码
    db.collection.dropIndex({ fieldName: 1, fieldName2: -1 }) // 根据索引键删除
  • 删除集合上的所有索引(除了 _id 索引,它是自动创建且不能被删除的):

    javascript 复制代码
    db.collection.dropIndexes()

索引对查询性能的影响

  • 查询性能提升:索引可以帮助数据库快速定位到所需文档,避免全表扫描,显著减少查询响应时间。

  • 写入性能折损:每次插入、更新或删除文档时,MongoDB都需要维护索引,这会导致写入操作的性能下降,尤其是当索引较多或者数据更新频繁时。

  • 唯一索引:不仅可以加速查找,还强制字段值唯一性,有助于数据完整性。

  • 复合索引:在多个字段上创建索引时,MongoDB可以利用索引来优化涉及多个字段的查询条件,特别是在查询条件顺序与索引键顺序一致时效果最佳。

  • 地理空间索引:特别适用于GIS应用,能够高效地处理基于经纬度的地理位置查询。

因此,在设计索引策略时,需要根据实际查询模式和业务需求进行权衡,并定期审查和调整索引结构以保持最优性能。同时,考虑到磁盘空间占用和维护成本,不建议无目的地创建大量索引。

相关推荐
TDengine (老段)10 小时前
TDengine 索引使用指南 — 何时建、怎么建、怎么用
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
ATA888810 小时前
企业数据库账号安全的技术解决方案
数据库·安全
DB哥讲数据库10 小时前
MySQL 8.4 安装教程:超详细图文讲解(附mysql安装包)
linux·数据库·mysql·centos
Databend10 小时前
AST Visitor API 迁移,怎么证明 AI 没改坏 SQL 语义?
数据库·ai编程
TDengine (老段)10 小时前
TDengine DDL 完整参考 — Database/STable/Table/Column/Tag
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
xlxxy_10 小时前
sap获取批次特性报表
java·linux·开发语言·前端·数据库·abap·mm
栋***t10 小时前
从“工具”到“基建”,麦塔在线考试系统经历的时代变局与定位逻辑
java·大数据·数据库·开源软件·无纸化
SelectDB技术团队10 小时前
Agent 可观测性:Apache Doris / SelectDB 的技术能力、选型对比与实践
数据库·人工智能·agent·可观测·ai-native·apache doris·selectdb
csdn2015_10 小时前
kafka如何确保消息不丢失
数据库·分布式·kafka
wefg110 小时前
【MySQL】MySQL C API 访问 MySQL
数据库·mysql