针对一个包含等式过滤,范围过滤和排序字段的查询,建立的复合索引的字段优先级,可以参考下面的规则
将所有等式过滤字段放在复合索引中最靠前的部分。
其次放入排序字段。如果有多个排序字段,升降序和返回结果的升降序保持一致。
最后放入范围过滤字段,区分度低(举个例子,性别的区分度为2,年龄的区分度为100,籍贯的区分度为10000)的放在前面。
如果某些字段不会被查询条件使用到,那就不需要将其加入索引中,这样可以减小索引大小。此外,如果某个字段作为索引,无法过滤掉90%以上的数据,就建议将其从索引中忽略。
最后,如果一张表上有多个索引,有时业务指定Hint可能会比MongoDB使用查询优化器选择的索引更好。
网友评论