面试题答案
一键面试- 创建索引语句:
在上述语句中,db.yourCollectionName.createIndex({name: 1, age: 1});
yourCollectionName
需替换为实际的集合名称。{name: 1, age: 1}
表示按照name
字段升序,然后在name
相同的情况下再按照age
字段升序创建复合索引。如果想降序,可以把1
改为-1
。 - 复合索引工作原理:
- 复合索引是由多个字段组成的索引。在MongoDB中,复合索引会按照定义索引时字段的顺序来组织数据。以
{name: 1, age: 1}
为例,MongoDB首先会按照name
字段对文档进行排序,然后在每个name
值内部,再按照age
字段对文档进行排序。 - 当进行查询时,如果查询条件的字段顺序与复合索引定义的字段顺序一致(或者是前缀匹配,即查询条件包含复合索引前面部分的字段),MongoDB可以利用该复合索引快速定位到符合条件的文档。例如查询
{name: "John", age: 30}
,MongoDB可以直接在复合索引中先定位到name
为John
的文档,然后在这些文档中再筛选出age
为30
的文档,从而大大提高查询性能。如果查询条件是{age: 30}
,则该复合索引无法有效利用,因为age
字段不是复合索引的前缀字段。
- 复合索引是由多个字段组成的索引。在MongoDB中,复合索引会按照定义索引时字段的顺序来组织数据。以