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

ここに私の質問は: 私は判断基準では、F、A、B、C、D、Eを持っている場合。 そして、もし私が(a、b、c、d、e、f)のインデックスを作成したら、

これは(a、c、d、e、f)、(a、c)、 、f)、(a、c、f))など これらのすべてを考慮する必要がありますか?

答えて

2

すべてのクエリフィールドをカバーする複合インデックスを作成することもできますし、インデックス交差に依存することもできますが、コレクションとデータの構造に依存します。 たとえば、CLIENT_IDの疎なインデックスと一意のインデックスとの交差を選択することができます

+0

ここで複合インデックスがどのように機能するかを説明してください。基準には7つのフィールドがあるので、私には多くの可能性があります。例えば コレクションに次のインデックスについて – 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

関連する問題