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 - Fatal编程技术网

需要为MongoDb构建适当的组合索引

需要为MongoDb构建适当的组合索引,mongodb,Mongodb,我收集了数以百万计的记录,将有4个字段用于获取数据,比如用于过滤的f1、f2、f3,以及用于数据排序的f4。将有3种类型的查询: 1) filter by f1 AND f2, and sort by f4 2) filter by f1 AND f2 AND f3, and sort by f4 3) filter by f1 AND f2 AND few additional fields, and sort by f4 所以排序总是按f4。前两种类型的查询将主要使用。案例3中的其他字段可

我收集了数以百万计的记录,将有4个字段用于获取数据,比如用于过滤的
f1、f2、f3
,以及用于数据排序的
f4
。将有3种类型的查询:

1) filter by f1 AND f2, and sort by f4
2) filter by f1 AND f2 AND f3, and sort by f4
3) filter by f1 AND f2 AND few additional fields, and sort by f4
所以排序总是按f4。前两种类型的查询将主要使用。案例3中的其他字段可能是集合中的任何字段(搜索功能),因此我不打算将它们用于索引


我的建议是,唯一的组合键
(f1,f2,f3,f4)
可能是最好的解决方案,但由于我几乎没有mongoDb方面的经验,我决定问你们。

对于前两个查询,从
{f1:1,f2:1,f4:1}
{f1:1,f2:1,f3:1,f4:1}
开始。您可以始终使用
.find(…).sort({f4:1}).explain()
,来评估所选索引是否适合给定查询。此外,您可能会发现,对
f1和f2的一些查询以及一些附加字段
query可能受益于附加索引,如
{f1:1、f2:1、addField1:1、f4:1}


此外,请注意使用的是
f4:1
还是
f4:-1
,这取决于您总是按
f4
升序还是降序排序。

您是否要求使用复合索引?如果是这样,这是否有帮助:这是一个类似的问题,但区别在于我没有范围查询,只喜欢
{f1:2,f2:3}
f1:{in:[2,3,4]}
,所以我的问题主要是关于为上述每种情况创建索引的必要性,或者一个复杂索引(f1,f2,f3,f4)将覆盖所有情况。根据@slee answwer的说法,我必须为每个案例创建单独的索引ok,结果$in是一个范围查询,这就是我发现的: