2017-10-28 189 views
1

我正在构建mongodb对象并将它传递给mongo存储库的findAll方法。如何在MongoDB中为动态标准建立索引以提高性能

如何通过围绕所有这些领域设计索引来实现更快的性能?

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))等。 我需要考虑所有这些?

回答

2

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

+0

您能否介绍一下复合索引在这里的工作原理?我有很多可能性,因为我们在标准中有7 8个字段。 – Malav

+0

例如 集合上的以下索引: {x:1,y:1,z:1} 可以支持以下索引支持的查询: {x:1} {x:1,y:1 } https://docs.mongodb.com/v3.2/tutorial/create-indexes-to-support-queries/ – Marco

+0

感谢您的回复。我还有一个问题,如果我有x,y,z,a,标准中的b字段。我只用3 x,y,z索引。这应该没问题吗? – Malav