我想检查是否有这样的数据或记录:检查员工是否有休假数据。
使用 spring data mongo,执行此操作的最佳方法是什么?
我检查过,似乎我无法执行诸如 .limit(1)
或 findBy...Limit
之类的操作。
我现在唯一想到的是:findFirstBy...
或 countBy...
我想要更快的,我要检查的表有或多或少的 1M 数据。
有更好的方法来检查吗? (findFirst vs countBy vs BETTER)?
顺便说一下,在我更大的表中......我有一些索引。 spring data mongodb 是否可以在使用索引时获取记录数?
查找第一个与计数依据:
根据我近 3M 的数据,比较 findFirstBy
与 countBy
之间的速度,findFirstBy
比 countBy
快得多>。上述集合的一个例子... find 首先执行(0.3 秒),而 count by 执行(3 秒)。这只是一个示例执行差异,但其想法是...首先查找比计数更快。
谢谢!
最佳答案
您无需指定要使用哪个索引。 Mongo默认会使用基于匹配列的索引。 确保休假列上有索引以加快查询速度。
findFirst
- 将返回第一个匹配的实例,因此通常是最快的,因为它只会扫描索引并在找到任何匹配项后立即返回
limit(1)
- 几乎与找到匹配项后退出的速度一样快。如果添加排序条件,它会变慢,因为它需要根据排序顺序获取正确的元素,而不仅仅是任何元素
count
- 通常会花费最长的时间,因为它需要扫描整个集合,而不仅仅是查找。如果你在离开时使用sparseIndex,计数操作将显着加快
为了更好地理解这些操作,请尝试运行 Explain关于查询。
注意 - 查询性能与调用它的客户端无关。
关于spring-data-mongodb - Spring Data Mongo 检查是否有数据或记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764747/