建立索引是保证数据库性能、保证用户体验的重要手段。我们应为所有需要成为查询条件的字段建立索引。建立索引的入口在控制台中,可分别对各个集合的字段添加索引。
# 单字段索引
对需要作为查询条件筛选的字段,我们可以创建单字段索引。如果需要对嵌套字段进行索引,那么可以通过 "点表示法" 用点连接起嵌套字段的名称。比如我们需要对如下格式的记录中的 color
字段进行索引时,可以用 style.color
表示。
{
"_id": "",
"style": {
"color": ""
}
}
在设置单字段索引时,指定排序为升序或降序并没有关系。在需要对索引字段按排序查询时,数据库能够正确的对字段排序,无论索引设置为升序还是降序。
# 组合索引
组合索引即一个索引包含多个字段。当查询条件使用的字段包含在索引定义的所有字段或前缀字段里时,会命中索引,优化查询性能。索引前缀即组合索引的字段中定义的前 1 到多个字段,如有在 A
, B
, C
三个字段定义的组合索引 A
, B
, C
,那么 A
和 A
, B
都属于该索引的前缀。
组合索引具有以下特点:
字段顺序决定索引效果 定义组合索引时,多个字段间的顺序不同是会有不同的索引效果的。比如对两个字段
A
和B
进行索引,定义组合索引为A
,B
与定义组合索引为B
,A
是不同的。当定义组合索引为A
,B
时,索引会先按A
字段排序再按B
字段排序。因此当组合索引设为A
,B
时,即使我们没有单独对字段A
设立索引,但对字段A
的查询可以命中A
,B
索引。需要注意的是,此时对字段B
的查询是无法命中A
,B
索引的,因为B
不属于索引A
,B
的前缀之一。字段排序决定排序查询是否可以命中索引 对字段
A
和B
设置以下索引:A: 升序
B: 降序
当您查询需要对 A
, B
进行排序时,可以指定排序结果为 A
升序 B
降序或 A
降序 B
升序,但不能指定为 A
升序 B
升序或 A
降序 B
降序。