【问题标题】:How to build index for dynamic criteria in mongodb to improve performance如何在 mongodb 中为动态标准建立索引以提高性能
【发布时间】:2017-10-28 11:33:08
【问题描述】:

我正在构建 mongodb 对象并将其传递给 mongo 存储库的 findAll 方法。

如何通过围绕所有这些字段设计索引来获得更快的性能?

val criteriaQuery = MongoDBObject.newBuilder
criteriaQuery += OrderNames.CLIENT_ID -> clientId
if (StringUtils.isNotBlank(orderId))
  criteriaQuery += OrderNames.ORDER_ID -> orderId
if (StringUtils.isNoneBlank(customerEmail))
  criteriaQuery += OrderNames.CUSTOMER_EMAIL -> customerEmail
if (orderStartDate != null) {
  if (orderEndDate != null)
    criteriaQuery += OrderNames.ORDER_DATE -> MongoDBObject("$gte" -> orderStartDate, "$lte" -> orderEndDate)
  else
    criteriaQuery += OrderNames.ORDER_DATE -> MongoDBObject("$gte" -> orderStartDate)
}
else if(orderEndDate != null)
  criteriaQuery += OrderNames.ORDER_DATE -> MongoDBObject("$lte" -> orderEndDate)
return criteriaQuery.result

我的问题是: 如果我在标准中有 a、b、c、d、e、f。 如果我在 (a, b, c, d, e, f) 上创建索引

它适用于 (a,c,d,e,f) , (a, c), (a, e, f), (a,c, f)) 等吗? 我需要考虑所有这些吗?

【问题讨论】:

    标签: mongodb scala playframework mongodb-query


    【解决方案1】:

    您可以创建覆盖所有查询字段的复合索引,也可以依赖索引交集,但这取决于集合和数据的结构。 例如,您可以选择稀疏索引与 CLIENT_ID 上的唯一索引相交

    【讨论】:

    • 你能解释一下复合索引在这里是如何工作的吗?因为我们在标准中有 7 8 个字段,所以有很多可能性。
    • 例如集合上的以下索引:{ x: 1, y: 1, z: 1 } 可以支持以下索引支持的查询:{ x: 1 } { x: 1, y : 1 } docs.mongodb.com/v3.2/tutorial/…
    • 感谢您的回复。我还有一个问题,如果我在标准中有 x、y、z、a、b 字段。我只在 3 x,y,z 上使用索引。应该没问题吧?
    • 是的。使用 find 上的解释功能,您可以通过索引检查检查了多少文档。
    猜你喜欢
    • 2020-06-22
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2010-09-19
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多