After using a myisam for years now with 3 indexes + around 500 columns for Mio of rows, I wonder how to “force” mongodb to store indexes in memory for fast-read performance.
In general, it is a simply structured table and all queries are WHERE index1=.. or index2=… or index3=.. (myisam) and pretty simple in mongodb as well.
It’s nice if mongodb is managing the index and ram on its own.
However, I am not sure if it does and about the way mongodb can speed up these queries on indexs-only best.
Thanks
MongoDB does not manage the RAM at all. It uses Memory-Mapped files and basically “pretends” that everything is RAM all of the time.
Instead, the operating system is responsible for managing which objects are kept in RAM. Typically on a LRU basis.
You may want to check the sizes of your indexes. If you cannot keep all of those indexes in RAM, then MongoDB will likely perform poorly.
MongoDB can use Covered Indexes to retrieve directly from the DB. However, you have to be very specific about the fields returned. If you include fields that are not part of the index, then it will not return “index-only” queries.
The default behavior is to include all fields, so you will need to look at the specific queries and make the appropriate changes to allow “index-only”. Note that these queries do not include the
_id, which may cause issues down the line.