gpt4 book ai didi

mongodb - 在不同的字段上使用 sort() 索引 MongoDB 以更快地找到 ()

转载 作者:IT老高 更新时间:2023-10-28 13:33:21 27 4
gpt4 key购买 nike

我正在运行大量此类查询:

db.mycollection.find({a:{$gt:10,$lt:100}, b:4}).sort({c:-1, a:-1})

我应该使用哪种索引来加快速度?我想我需要同时拥有 {a:1, b:1}{c:-1, a:-1},对吗?或者这些索引会以某种方式相互干扰而没有性能提升?

编辑:对我来说实际的问题是我在一个循环中运行了许多查询,其中一些在小范围内,其他在大范围内。如果我将索引放在 {a:1, b:1} 上,它会非常快速地选择小块,但是当涉及到大范围时,我会看到一个错误“sort() 的数据过多而没有指数”。否则,如果我将索引放在 {c:-1, a:-1} 上,则没有错误,但较小的 block (并且还有更多 block )的处理速度要慢得多。那么,如何在较小的范围内保持选择的快速性,而在大量数据时不会出错呢?

如果重要,我会通过 Python 的 pymongo 运行查询。

最佳答案

如果您阅读过文档,您会发现在这里使用两个索引是没有用的,因为 MongoDB 每次查询只使用一个索引(除非它是 $or),直到:https://jira.mongodb.org/browse/SERVER-3071已实现。

不仅如此,在使用复合排序时,索引中的顺序必须与正确使用索引的排序顺序相匹配,例如:

Or these indexes will somehow interfere with each other at no performance gain?

如果没有实现交叉,他们不会,{a:1,b:1}不匹配排序和{c:-1,a:-1}对于回答 find() 是次优的加 a不是那个复合词的前缀。

因此,最优索引的迭代将立即是:

{a:-1,b:1,c:-1}

但这还不是全部。从 $gt$lt实际上是范围,例如 $in他们在索引方面遇到同样的问题,这篇文章应该提供答案:http://blog.mongolab.com/2012/06/cardinal-ins/真的看不出有什么理由重复它的内容。

关于mongodb - 在不同的字段上使用 sort() 索引 MongoDB 以更快地找到 (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18998787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com