mongodb 联合索引和单个字段索引性能那个好些。

查看:871
本文介绍了mongodb 联合索引和单个字段索引性能那个好些。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

现在遇到一个性能问题,解决办法就是给字段加索引,现在纠结的是字段组合索引还是单个索引查询效率问题?

场景
现在查询字段是parentId,key ,两个字段同时查询。

现在见索引的方案是
1 分别给 parentId,key添加索引

2 建一个组合索引 {parentId:1,key:1}这样的方式:

这两个查询性能是不是差不多啊?

求证

解决方案

索引效率来说肯定是联合索引效率高,很多时候如果用多个字段查询应该考虑用联合索引。
但是事情也没有完全的绝对,也要考虑到索引的开销。
以你的条件为例,假设key能够唯一确定一条记录,parentId是不是就没有必要加上了呢?
退一步,即使key不能唯一确定一条,如果它能够把结果集确定在一定的小范围内,比如5条记录,10条记录,那parentId这个条件无非就是在这10条记录内再扫一遍寻找合适的记录,比起把它加进索引中造成的写入和存储、内存开销,我可能会选择根本不把它放进联合索引里。
一个条件能过滤掉的记录越多,我们说它的选择性(selectivity)越好。一般情况下,我们在建立索引的时候都要把选择性越好的条件放前面,选择性差的放后面。差到一定程度就别放进来了。
这其实是一个时间和空间的平衡。放进索引里的条件省时间(包括CPU时间,查询时间)费空间(包括存储空间,内存空间);不放进索引里的条件费时间,省空间。大部分时候我们是期望得到前者的,什么时候选择后者就看你自己对实际情况的评估了。

这篇关于mongodb 联合索引和单个字段索引性能那个好些。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆