面试题答案
一键面试复合索引设计
设计复合索引{name: 1, age: 1, city: 1}
。
设计思路
- 频繁查询字段优先:因为频繁根据
name
和age
查询数据,将这两个字段放在索引前面,MongoDB在使用复合索引时,会从左到右匹配查询条件,这样对于name
和age
的查询能够快速定位到相关文档。 - 兼顾偶尔查询:虽然
city
查询不频繁,但将其放在索引最后,当有根据city
查询时,也能利用到这个复合索引,只不过查询效率可能不如前两个字段组合的查询那么高。
可能存在的陷阱
- 索引维护成本:复合索引会增加写操作的成本,因为每次写入、更新或删除文档时,都需要更新索引。如果写操作频繁,会影响系统整体性能。
- 索引选择问题:如果查询条件非常复杂,MongoDB可能不会选择我们设计的复合索引,而是选择其他索引或者进行全表扫描,这就需要通过
explain
命令来分析查询计划,确保索引被正确使用。 - 索引大小限制:索引会占用额外的存储空间,如果索引字段较多或者数据量很大,可能会导致索引文件过大,超出系统限制。