面试题答案
一键面试创建合适索引提升文本查询性能
- 使用文本索引:在MongoDB中,对于文本查询应创建文本索引。使用
createIndex
方法,例如:
这里db.collection('articles').createIndex({ articleContent: "text" });
articleContent
是包含文章内容的字段名。
大量文章集合的索引设计
- 单字段文本索引:若仅对文章内容进行查询,如上述创建针对文章内容字段的文本索引即可。
- 复合文本索引:若除文章内容外,还经常结合其他字段(如文章类别)进行查询,可以创建复合文本索引。例如:
这里db.collection('articles').createIndex({ articleContent: "text", category: 1 });
category
是文章类别的字段,1表示升序索引(也可根据需要设置为 -1 降序)。
索引类型选择
- 文本索引:适用于全文搜索场景,MongoDB会对文本进行分词处理,支持自然语言查询。它能够处理大量文本数据,并有效提升查询性能。相比普通索引,文本索引在处理文本搜索时功能更强大,可进行语义搜索等操作。
- 普通索引:若查询条件较为简单,如基于某个字段的精确匹配,可以使用普通索引。例如,若经常根据文章ID查询,可创建普通索引:
但普通索引对文本搜索的支持不如文本索引,不适用于全文搜索场景。db.collection('articles').createIndex({ articleId: 1 });
维护索引的注意事项
- 索引数量:避免创建过多索引,因为每个索引都会占用额外的存储空间,并且在插入、更新和删除操作时会增加开销。只创建必要的索引,通过分析查询模式确定。
- 索引更新:当数据结构或查询模式发生较大变化时,要及时调整索引。例如,如果不再根据某个字段进行查询,可考虑删除对应的索引。
- 性能监控:定期使用MongoDB的性能监控工具,如
explain
方法,检查索引的使用情况和查询性能。若发现索引未被有效使用或性能下降,及时优化索引。 - 索引重建:在某些情况下,如索引碎片过多影响性能时,可能需要重建索引。可通过删除并重新创建索引的方式进行重建。但要注意在操作期间可能会对业务产生影响,尽量选择业务低峰期进行。