Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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的可靠性如何';s查询优化器?_Mongodb_Indexing - Fatal编程技术网

MongoDB的可靠性如何';s查询优化器?

MongoDB的可靠性如何';s查询优化器?,mongodb,indexing,Mongodb,Indexing,根据: 对于查询,MongoDB查询优化器选择并缓存最多的查询 给定可用索引的高效查询计划 因此,如果查询优化器根据indexStats选择一个索引而不是另一个索引,那么这是否足以删除未使用的索引并只保留首选索引 或者,在边缘情况下,保留查询优化器不喜欢的索引并删除首选索引是有意义的吗?如果您有一个索引,但它从未被选中,并且您没有计划将来使用它的查询,我会将其删除。每个索引都会消耗RAM,当MongoDB不再适合RAM中的所有索引时,性能就会下降。@Mercer撇开这一点不谈,我可以强制mong

根据:

对于查询,MongoDB查询优化器选择并缓存最多的查询 给定可用索引的高效查询计划

因此,如果查询优化器根据
indexStats
选择一个索引而不是另一个索引,那么这是否足以删除未使用的索引并只保留首选索引


或者,在边缘情况下,保留查询优化器不喜欢的索引并删除首选索引是有意义的吗?

如果您有一个索引,但它从未被选中,并且您没有计划将来使用它的查询,我会将其删除。每个索引都会消耗RAM,当MongoDB不再适合RAM中的所有索引时,性能就会下降。@Mercer撇开这一点不谈,我可以强制mongo使用非自动选择的索引。我的问题是,是否有人应该反对查询优化器的决定,或者优化器应该始终拥有最终决定权。请记住,索引是通过匹配谓词的确切顺序工作的,并且允许使用前缀。也就是说,如果你有一个索引
{a:1,b:1,c:1}
,那么1。您的查询必须按
{a:…,b:…,c:…}
的顺序指定键,以便索引;2.查询
{a:…,b:…}
{a:…}
也将被索引;三,。查询
{a:…,c:…}
{b:…,c:…}
{b:…}
{c:…}
将不会被索引。MongoDB还可以从现有索引生成复合索引。在决定是否需要附加索引时,请记住这些要点。@B.Fleming我认为你的第一句话不正确。查询中的字段顺序并不重要,只是字段排序方向。@Manuel你是对的,我对主题的记忆有点模糊。查询中键的顺序并不重要。