搜索

首页  >  问答  >  正文

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

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

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

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

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

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

求证

为情所困为情所困2820 天前843

全部回复(1)我来回复

  • 伊谢尔伦

    伊谢尔伦2017-05-02 09:24:03

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

    回复
    0
  • 取消回复