Skip to main content

Covered Queries in MongoDB

According to mongoDB document overview of index,If your application queries a collection on a particular field or set of fields, then an index on the queried field or a compound index on the set of fields can prevent the query from scanning the whole collection to find and return the query results. For more information about indexes click here.

What is a Covered Query

Covered Query : All the fields in the query are part of an index and all fields returned in the query are in the same index.

 MongoDB matches the query conditions and returns the result using the same index without actually looking inside documents. Since indexes are present in RAM, fetching data from indexes is much faster as compared to fetching data by scanning documents.

Using Covered Queries
Consider the following document in customers collection:

   "_id": ObjectId("67667989hu9uh665"),
   "contact": "987654321"
   "gender": "M",
   "name": "Dilip",
   "user_name": "dksingh"

We should  create a compound index for customers collection on fields gender and user_name using following query:

>db. customers.ensureIndex({gender:1,user_name:1})

Here now, this index will cover the following query:

>db. customers.find({gender:"M"},{user_name:1,_id:0})

It would fetch the required data from indexed data which is very fast. Since our index does not include _id field it means MongoDB did not go into database documents, we have explicitly excluded _id from result set of our query as MongoDB by default returns _id field in every query.
See following query here we did not create index of gender so when we execute this query, mongoDB  will scan the this document in database.

>db. customers.find({gender:"M"},{user_name:1})

At the end , remember that an index cannot cover a query if:

Any of the indexed fields is an array OR indexed fields is a subdocument

Popular posts from this blog

Query to find stored procedures by nested stored procedure name

Problem: Suppose we have a stored procedure which has been used in several stored procedure, I mean stored procedure usp_proc1 is nested in many stored procedures like below
So I want to find all those queries who containing usp_proc1
Solution: There is a lot of solutions, I'm giving some of them below. If you want to get the only name of the stored procedures then use the following query. Using join query on system tables syscomments and sysobjects we can get the stored procedures name which containing the particular table, nested procs or any other string. FROMsyscommentss

Check for changes to an SQL Server table?

Problem: Suppose your team is working on the under-development project so it might be possible continuous work on the database and perform changes in Table, Stored procedure as per requirement, and daily you have to update the testing server database as per changes are done in developing server database then how it is possible to trace those changes. There are a lot of solutions for this problem which is listed below Solution 1: For SQL Server 2000, 2005 and above use the CHECKSUM command SELECTCHECKSUM_AGG(BINARY_CHECKSUM(*))FROMYour_Table_NameWITH (NOLOCK); That will return the same number each time its run as long as the table contents haven't changed. Unfortunately CHECKSUM does not work always properly to detect changes. It is only a primitive checksum and no CRC calculation. Therefore you can't use it to detect all changes, e. g. symmetrical changes result in the same CHECKSUM! Solution 2: 1.Run the following query. Before executing query replace DB_Name with your database name…

Merge and Merge join transformation in SSIS

Using Merge Transformation we can combine two sorted data-set into single data-set basically Merge Transformation used to combines rows from two sorted data flows into one sorted data flow. Following tasks you may perform using Merge Transformation: 1.Suppose we have a scenario like, we need to merge data from a database table and excel means we want to merge data from two different data sources. For such type of scenario, you can use Merge Transformation. 2.If we want to merge data from two same structured tables but exists two different servers. 3.Sometimes we get an error due to data in a row, after correcting errors in the data we can re-merge rows easily. See below explanations may help you to understand Merge Transformation: I do evaluate here, you already know about the data source, data conversion, data flow, task flow, control flow etc. Note:Before Merge transformation, we need to sort the data using Sort Transformation. After sorting data add data path to Merge…