Indexes with included columns, what's the difference?

前端 未结 3 477
孤独总比滥情好
孤独总比滥情好 2021-02-02 12:24

I\'ve never really understood the difference between these two indexes, can someone please explain what the difference is (performance-wise, how the index structure will look li

3条回答
  •  长发绾君心
    2021-02-02 13:07

    In the first example, only the index column: PostalCode is stored in the index tree with all the other columns stored in leaf level of the index. This makes the index smaller in size and is useful if you wouldn't be using a where, Join, group by against the other columns but only against the PostalCode.

    In the second index, all the data for all the columns are stored in the index tree, this makes the index much bigger but is useful if you would be using any of the columns in a WHERE/JOIN/GROUP BY/ORDER By statements.

    Include columns makes it faster to retrieve the data when they are specified in the select list.

    For example if you are running:

    SELECT PostalCode, AddressLine1, AddressLine2, City, StateProvinceID 
    FROM Person.Address 
    Where PostalCode= 'A1234'
    

    This will benefit from creating an index on PostalCode and including all the other columns

    On the other hand, if you are running:

    SELECT PostalCode, AddressLine1, AddressLine2, City, StateProvinceID 
    FROM Person.Address 
    Where PostalCode= 'A1234' or City = 'London' or StateProvinceID = 1 or AddressLine1 = 'street A' or AddressLine2 = 'StreetB'
    

    This would benefit more from having all the columns in the index

    Have a look at the links below, these might help more with your query

    Index with Included Column: https://msdn.microsoft.com/en-us/library/ms190806(v=sql.105).aspx

    Table and Index Organization: https://msdn.microsoft.com/en-us/library/ms189051(v=sql.105).aspx

提交回复
热议问题