详解Mongodb 添加索引

宁睿  金牌会员 | 2024-8-21 04:27:58 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 943|帖子 943|积分 2839

MongoDB 添加索引详解
索引是 MongoDB 中非常重要的一个特性,它可以大幅提高数据查询的性能。本文将具体介绍 MongoDB 中各种类型的索引,以及如安在实际开辟中公道添加索引来优化查询效率。
一、MongoDB 索引概述

索引是 MongoDB 中用于提高查询性能的一种数据结构。它存储着有限数量的数据的子集,并指向存储在聚会集的数据。当执行查询时,MongoDB 会优先利用索引来快速定位数据,从而大大提高查询速率。
MongoDB 支持以下几种类型的索引:

  • 单键索引 (Single Field Index)

    • 基于单个字段创建的索引。
    • 可以对数字、字符串、日期等类型的字段创建索引。

  • 复合索引 (Compound Index)

    • 基于多个字段创建的索引。
    • 可以对多个字段的组合举行索引。

  • 地理空间索引 (Geospatial Index)

    • 用于存储和查询地理位置数据。
    • 分为 2d 索引和 2dsphere 索引。

  • 文本索引 (Text Index)

    • 用于在字符串内容中执行文本搜索。
    • 可以对聚会集的字符串字段创建文本索引。

  • 哈希索引 (Hashed Index)

    • 基于字段值的哈希函数创建的索引。
    • 实用于需要快速 equality match 查询的场景。

  • TTL 索引 (Time-To-Live Index)

    • 用于实现文档的自动过期删除。
    • 基于文档的时间戳字段创建索引。

根据具体的查询需求,公道地利用这些索引类型可以极大地提高查询性能。下面我们将分别介绍这些索引的实用场景和创建方法。
二、单键索引

单键索引是最根本的索引类型,它基于单个字段创建。创建单键索引的语法如下:
python
复制
javascript
db.collection.createIndex({ : , … })
此中 <field1> 是要索引的字段名,<type> 指定索引的排序方式,通常取值为 1 (升序) 或 -1 (降序)。
比方,在 users 聚会集的 name 字段上创建一个升序索引:
  1. db.users.createIndex({ name: 1 })
复制代码
如许,当我们执行需要根据 name 字段举行查询时,MongoDB 就会优先利用这个索引来快速定位数据。
除了单个字段,我们还可以在多个字段上创建复合索引。
三、复合索引

复合索引是基于多个字段创建的索引。它的语法如下:
  1. db.collection.createIndex({ <field1>: <type>, <field2>: <type>, ... })
复制代码
比方,在 users 聚会集的 name 和 age 字段上创建一个复合索引:
  1. db.users.createIndex({ name: 1, age: -1 })
复制代码
如许,当我们查询 name 和 age 组合条件时,MongoDB 会优先利用这个复合索引来查找数据。
创建复合索引时,需要注意以下几点:

  • 索引字段的序次很重要。MongoDB 会按照创建索引时指定的序次来利用索引。
  • 索引的前缀字段越多,查询性能越好。但是,索引占用的空间也会越大。
  • 索引中的字段应该是查询中经常利用的,不要索引无用的字段。
通过公道利用复合索引,我们可以大幅提高查询效率。
四、地理空间索引

MongoDB 提供了两种地理空间索引:2d 索引和 2dsphere 索引。

  • 2d 索引

    • 用于存储和查询平面上的地理坐标点。
    • 实用于处置惩罚平面上的几何查询,如矩形范围查询。
    • 创建 2d 索引的语法:
      1. db.collection.createIndex({ <location field>: "2d" })
      复制代码

  • 2dsphere 索引

    • 用于存储和查询球面上的地理坐标点。
    • 实用于处置惩罚球面上的几何查询,如圆形范围查询。
    • 创建 2dsphere 索引的语法:
      1. db.collection.createIndex({ <location field>: "2dsphere" })
      复制代码

比方,在 locations 聚集的 position 字段上创建 2dsphere 索引:
  1. db.locations.createIndex({ position: "2dsphere" })
复制代码
有了这个索引,我们就可以高效地执行各种地理空间查询,如查找某个位置周围 10 公里范围内的全部位置点。
五、文本索引

文本索引答应我们在字符串内容中执行文本搜索。创建文本索引的语法如下:
  1. db.collection.createIndex({ <field1>: "text", <field2>: "text", ... })
复制代码
比方,在 articles 聚集的 title 和 content 字段上创建文本索引:
  1. db.articles.createIndex({ title: "text", content: "text" })
复制代码
有了这个索引,我们就可以利用 $text 查询操作符来搜索文档中包含特定文本的记录:
  1. db.articles.find({ $text: { $search: "MongoDB" } })
复制代码
文本索引有以下特点:

  • 默认情况下,会对字段内容举行英文分词处置惩罚。
  • 可以指定语言选项来支持其他语言的文本搜索。
  • 可以通过 $meta 操作符来获取匹配度得分。
文本索引在处置惩罚全文检索、相关性排序等场景非常有用。
六、哈希索引

哈希索引基于字段值的哈希函数创建,实用于需要快速 equality match 查询的场景。创建哈希索引的语法如下:
  1. db.collection.createIndex({ <field>: "hashed" })
复制代码
比方,在 users 聚集的 email 字段上创建哈希索引:
  1. db.users.createIndex({ email: "hashed" })
复制代码
哈希索引有以下特点:

  • 基于哈希值举行索引,对于 equality match 查询非常高效。
  • 不支持范围查询、排序和聚合操作。
  • 占用空间较小,实用于大数据量的场景。
哈希索引实用于需要快速根据字段值查找记录的场景,如根据 ID 查找用户信息等。
七、TTL 索引

TTL 索引用于实现文档的自动过期删除。创建 TTL 索引的语法如下:
  1. db.collection.createIndex({ <fieldname>: 1 }, { expireAfterSeconds: <number> })
复制代码
此中 <fieldname> 是包含时间值的字段,<number> 是过期时间(以秒为单位)。
比方,在 logs 聚集的 createdAt 字段上创建一个 TTL 索引,使文档在创建 60 秒后自动删除:
  1. db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 60 })
复制代码
TTL 索引有以下特点:

  • 基于文档中的时间戳字段创建索引。
  • 定期扫描索引,删除过期的文档。
  • 实用于存储偶尔效性的数据,如日记、缓存等。
TTL 索引可以资助我们自动管理过期数据,减轻手动清理的负担。
八、索引管理

除了创建索引,我们还需要对索引举行有效管理。常见的索引管理操作包括:

  • 检察索引
    1. db.collection.getIndexes()
    复制代码
  • 删除索引
    1. db.collection.dropIndex("<indexName>")
    2. db.collection.dropIndexes()
    复制代码
  • 重建索引
    1. db.collection.reIndex()
    复制代码
  • 监控索引利用情况
    1. db.collection.stats()
    2. db.collection.totalIndexSize()
    复制代码
  • 索引优先级管理
    1. db.collection.createIndex({ field1: 1, field2: 1 }, { background: true })
    复制代码
通过这些操作,我们可以有效地管理 MongoDB 中的索引,确保索引始终处于最优状态。
九、最佳实践

在实际利用 MongoDB 索引时,需要注意以下最佳实践:

  • 分析查询需求,选择符合的索引类型。
  • 创建复合索引时,将最常用的查询字段放在前面。
  • 得当创建希罕索引,制止索引过大。
  • 定期监控索引利用情况,及时删除无用索引。
  • 在非高峰时段重建索引,制止影响业务。
  • 公道设置索引过期时间,控制磁盘空间占用。
  • 利用索引分析器工具,优化复杂查询的索引策略。
  • 在开辟和测试环境中先行验证索引效果,再应用到生产环境。
通过这些最佳实践,我们可以充分发挥 MongoDB 索引的性能优势,提高应用步伐的查询效率。
十、总结

本文具体介绍了 MongoDB 中各种类型的索引及其创建方法,包括:

  • 单键索引、复合索引
  • 地理空间索引(2d 索引和 2dsphere 索引)
  • 文本索引
  • 哈希索引
  • TTL 索引
同时,我们也探究了索引的管理操作,如检察、删除、重建索引,以及监控索引利用情况等。
末了,我们总结了 MongoDB 索引的最佳实践,包括分析查询需求、公道设置索引、定期维护索引等方面的建议,旨在资助读者在实际项目中更好地应用和管理 MongoDB 索引。
通过本文的学习,信赖读者已经掌握了 MongoDB 索引的根本知识,并能够根据具体的业务需求,公道地规划和利用索引,提高应用步伐的查询性能和可靠性。
该博文为原创文章,未经博主同意不得转载。本文章博客地址:https://blog.csdn.net/weixin_39145520/article/details/134901938

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

宁睿

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表