Wednesday, 4 April 2012

Missing Index



All of we know how important the index is. In this article I am trying to illustrate about the missing index and how we find the missing index.



Index is to improve the performance of the query. For the causes of missing index it takes long delay of performance of the query. I personally fall such conditions where a query takes more than 1 and ½ hour to complete the executions. So we understand that what the impacts of a missing index.

How we find the missing index

We can see the missing index by using the DMVs.  Use these SQL Statements to find the missing index.

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT  ROUND(s.avg_total_user_cost * s.avg_user_impact
        * (s.user_seeks + s.user_scans),0) AS [Total Cost],
        d.[statement] AS [Table Name], equality_columns,           
        inequality_columns, included_columns
FROM    sys.dm_db_missing_index_groups g
        INNER JOIN sys.dm_db_missing_index_group_stats s
                   ON s.group_handle = g.index_group_handle
        INNER JOIN sys.dm_db_missing_index_details d
                   ON d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC


Here we use the TRANSACTION ISOLATION LEVEL READ UNCOMMITED. The purpose of this is to ensure the SQL that follows does not take out any locks and does not honour any locks.

The details of the related DMV are mentioned bellow.

DMV
Description
sys.dm_db_
missing_index_details
Contains details of the
database/schema/table
the missing index relates to, together with how the index usage has been identified in queries (such as equality/inequality).
sys.dm_db_missing_
index_group_stats
Contains details of how often the index would have been used, how it would be used (seek or scan), and a measure of its effectiveness.
sys.dm_db
_missing_index_groups
This is a linking DMV,
linking the previous two DMVs together.

Here the missing index gives the calculated columns name called "Total Cost". This uses a combination of the impact of the index, its cost, together with a measure of the number and type of index accesses to calculate its importance.

Finding Important Missing Index

It is not a good idea to blindly implement the suggested missing indexes, since indexes have a cost associated with them.
When data is inserted into a table, data may also need to be added to any associated indexes, this can increase the query duration. That said, some indexes may improve the performance of updates/deletes since these queries often have a WHERE clause. We can use a DMVs or the Statistics Time (or IO) command to measure the impact of adding an index.

Hope you like it.



Posted by: MR. JOYDEEP DAS





4 comments:

  1. Hi joydeep,
    Thanks to provide detail about missing indexes... it is really too useful information.

    ReplyDelete
  2. Dear Joydeep & Palash ,

    How replication works and what would be effect on the spped of sql-server after replication

    ReplyDelete
    Replies
    1. I will be with you shortly related to this. First I have to clear other pending request….

      Delete