1

複合インデックス があるとします{ a: 1, b: 1 }

クエリdb.Collection.find( { b: 1 } )はこのインデックスを使用しません。クエリ オプティマイザーは、このインデックスを実行候補として選択していないようです。

ただし、具体的hintにインデックスを指定すると、クエリははるかに高速に実行され、nscanはるかに低くなります。

db.Collection.find( { b: 1 } ).hint( { a: 1, b: 1 } )

私の質問は、インデックスを使用するとクエリが高速になる場合、クエリオプティマイザーがクエリのインデックスを単独で無視するのはなぜですか?b

4

3 に答える 3

0

複合インデックスは、通常、プレフィックスが一致するクエリ、または完全に一致するクエリに使用されます。

明らかに、最初のクエリは適格ではありません。これにはハックを提供する必要はありません。代わりに、{ a : 1, b : 1 } インデックスを使用するようにオプティマイザにヒントを与えることができます

db.Collection.find({ b: 1 }).hint({ a:1, b:1 })
于 2013-06-17T18:16:25.990 に答える