Hacker News new | ask | show | jobs
Optimizing MongoDB Compound Indexes (emptysquare.net)
46 points by jiryu 4996 days ago
3 comments

About 2 years ago (time is flying) I explained how I did the same to support range queries over "n" attributes, the method ended up being in the book "MongoDB, the Definitive Guide" by Chodorow and Dirolf (O'Reilly):

http://chemeo.com/doc/technology

(Search for "Indexing For High Speed Search" to skip non MongoDB related information).

What should be added to this is the ability to tell Mongo to return an error if your query requires a table scan. That one configuration item can be the difference between a request returning an error and a whole site going down for an extended period.
There is a config setting for that

  notablescan = true
http://docs.mongodb.org/manual/reference/configuration-optio...
Right I was saying that the author should add that to his article. Its a very valuable configuration item and anytime your dealing with optimizing indexes its worth enabling.
You can ask it to explain what it did, just like you'd ask for the last error. Then in your app enforce whatever rules related to indexes you wish.
explain actually runs the query. From http://www.mongodb.org/display/DOCS/Explain :

    Note that explain runs the actual query to determine the result. If the query is slow, the explain will be slow too.
Is MongoDB actually able to combine 2 or more indices?
No - it can only use one for a given query. But a compound index like the ones I describe in the post can index many fields.
Yes of course, but it's kinda slow if you have to maintain one compound index for each possible query you're going to run, that's why I was asking.
Nope, you can use the compound index 'a,b,c' to query over the following fields:

    a
    a.b
    a,b,c
The manual actually explains it like that.
You may be interested in this:

https://jira.mongodb.org/browse/SERVER-3071

It's index intersection, and it's scheduled for 2.3.1 which is the next next dev release. I'm hoping it makes it in for 2.4.