Mongodb低基数指数

时间:2018-07-29 10:50:21

标签: mongodb indexing

我知道从sql背景来看

  

索引的基数是其中的唯一值的数量。您的数据库表中可能有10亿行,但是如果这些表中只有8个唯一值,则基数非常低。

     

低基数索引并不是主要的效率提升。大多数SQL索引都是二进制搜索树(B-Trees)。与对表中的每一行进行串行扫描以查找匹配约束相比,B树在对数上减少了必须进行的比较次数。当树的大小较小时,对B树执行搜索的收益非常低。

     

那么将索引放在布尔字段上?还是枚举值字段?在非常多的行中,很少数量的不同值的基数不会产生明显的效率提升。将基数很高的字段保存在数据库索引中,以确保与顺序扫描相比,扫描B树的收益最大。

mongodb 如何?我们是否必须在经常过滤的低基数字段上创建索引?例如具有四个状态的枚举字段

1 个答案:

答案 0 :(得分:0)

是的,MongoDB存在相同的问题,它使用B树进行索引。因此,带有索引的低基数值会出现性能问题。

这是一篇很好的文章

https://www.percona.com/blog/2018/12/19/using-partial-and-sparse-indexes-in-mongodb/

尽管没有简单或受支持的解决方案,但它为特定情况提供了一些选择:

  
      
  • 您在分布不均的布尔值字段上运行查询,而您主要查找的是不太频繁的值
  •   
  • 您的基数字段很低,大多数查询都在寻找值的子集
  •   
  • 大多数查询在字段中查找值的有限子集
  •   
  • 您没有足够的内存来存储非常大的索引-例如,您从WiredTiger缓存中驱逐了很多页面
  •   
相关问题