Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb低基数指数_Mongodb_Indexing - Fatal编程技术网

Mongodb低基数指数

Mongodb低基数指数,mongodb,indexing,Mongodb,Indexing,从sql的背景我知道 索引的基数是索引中唯一值的数量。数据库表中可能有10亿行,但如果这些行中只有8个唯一值,则基数非常低 低基数索引不是主要的效率增益。大多数SQL索引都是二进制搜索树(B-树)。与连续扫描表中的每一行以查找匹配约束相比,B树以对数方式减少了必须进行的比较次数。当树的大小很小时,对B-树执行搜索的收益很低 那么在布尔字段上放置索引?还是枚举值字段?在非常多的行中以非常少的不同值为基数将不会产生显著的效率提高。将数据库索引保存为基数非常高的字段,以确保扫描B树的收益最大,而不是顺

从sql的背景我知道

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

低基数索引不是主要的效率增益。大多数SQL索引都是二进制搜索树(B-树)。与连续扫描表中的每一行以查找匹配约束相比,B树以对数方式减少了必须进行的比较次数。当树的大小很小时,对B-树执行搜索的收益很低

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


mongodb怎么样?我们必须在经常过滤的低基数字段上创建索引吗?例如,一个具有4个状态的枚举字段是,MongoDB也有同样的问题,它使用B树进行索引。因此,索引的基数值较低时会出现性能问题

这里有一篇关于它的好文章

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

  • 在分布不均匀的布尔字段上运行查询,主要查找频率较低的值
  • 您有一个较低的基数字段,大多数查询都会查找值的子集
  • 大多数查询在字段中查找有限的值子集
  • 您没有足够的内存来存储非常大的索引–例如,您有很多从WiredTiger缓存中移出的页面