Lets say I have document with the following two keys:
1) key1
2) key2
If I am creating compound index on both of them..
{'key1':1,'key2':1}
When running a query relevant only for key1.. does the index above is used? or I need to create specific index only for key1 also?
Thanks
In MongoDB, you can use index prefix to query the database. You can't use anything else. If your query does not contain key prefix the index won't be used.
Assuming your proposed index {'key1':1,'key2':1}
:
db.some.find({key1 : {$gt : 100}})
- uses prefixdb.some.find({key1 : {$gt : 100}, key2 : {$lt : 30}})
- uses full indexdb.some.find({key3 : 'test'}).sort({key1 : 1})
- uses prefix for sort (direction match)db.some.find({key2 : {$gt : 100}})
- index order matters - key2 is not prefixdb.some.find({key3 : 'test'}).sort({key1 : -1})
- index direction matters for multicolumn indexesdb.some.find({key3 : 'test'}).sort({key2 : 1})
- it's not prefixYes. In a B-tree index, you can use a prefix of the columns.
So you can use the index for a query on 'key1' (but not as efficiently for 'key2', the column order in the index matters).
This is the same situation as in a printed telephone book, which is an index on [lastName, firstName]. You can use that to look up people by lastName easily (and not so easily by firstName, but still more efficient than calling everyone and asking for their first name).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With