You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB Performance Advisor建议为careertest.sessions建索引,求含义说明

MongoDB索引建议说明

触发建议的背景

该建议是针对CareerTest库下sessions集合的过期数据清理操作生成的,触发建议的操作是使用以下条件的删除查询:

{expires: {$lt: 指定时间}}

该查询的作用是删除已经超过有效期的会话记录。

当前集合的索引现状

目前该集合仅存在1个默认的单字段索引:

_id: 1

没有匹配上述删除查询条件的专用索引。

现有配置的性能问题

没有expires字段索引的情况下,每次执行过期清理操作都会触发全表扫描:

  • MongoDB需要遍历集合内的所有文档才能筛选出符合过期条件的记录
  • 随着集合数据量增长,该操作的IO消耗、执行耗时会持续上升,严重时会拖慢其他业务请求的响应速度

建议索引的作用

为expires字段创建升序索引(即建议中提到的expires: 1)后:

  • 清理操作可以直接通过索引定位到所有符合$lt条件的过期文档,无需全表扫描,大幅降低操作的资源消耗和执行耗时
  • 你也可以直接将该索引设置为TTL(生存时间)索引,MongoDB会自动在后台清理过期会话,无需手动调度删除任务,进一步降低维护成本

索引创建命令

普通索引创建命令(不开启自动TTL清理,仍由业务代码调度删除):

db.sessions.createIndex({expires: 1}, {background: true})

TTL自动清理索引创建命令(由MongoDB自动清理过期数据):

db.sessions.createIndex({expires: 1}, {expireAfterSeconds: 0, background: true})

添加background: true参数可以保证建索引过程中不会阻塞其他读写操作,降低对线上业务的影响。如果当前sessions集合数据量较大,建议选择业务低峰期执行建索引操作。

内容的提问来源于stack exchange,提问作者AndrewLeonardi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:45:02