Question

say I have an Item document with :price and :qty fields. I sometimes want to find all documents matching a given :price AND :qty, and at other times it will be either :price on its own or :qty on its own.

I have already indexed the :price and :qty keys, but do I also need to create a compound index on both together or are the single key indexes enough?

Edit: I found this article on the mongodb site very useful:

http://www.mongodb.org/display/DOCS/Indexing+Advice+and+FAQ

Was it helpful?

Solution

An index on price helps with queries on price. An index on qty helps with queries on qty. An index on price and qty helps with queries on price AND queries on price and qty. So, it's like getting two indexes for the price of one. It will not help for queries on qty, though.

You should minimize the number of indexes you have, so drop one of your single-key indexes and create a compound index starting with that key.

As a general rule, if you're doing a query on x, y, and z, you should have an index like {x:1, y:1, z:1}. This index will make the following queries fast:

db.foo.find({x : ..., y : ..., z : ...})
db.foo.find({x : ..., y : ...})
db.foo.find({x : ...})

It will not make these queries fast:

db.foo.find({y : ..., z : ...})
db.foo.find({y : ...})

So, make sure your query has the starting key(s) of an index in it.

OTHER TIPS

if you need :price on its own or :qty on its own then a compound index won't work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top