2017-10-28 190 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