• Sean is correct, you have asked a vague question.

    A covering index includes all the information needed for a query. This means the columns in the SELECT list, as well as join/where/on/having clauses exist in the index. Therefore the query doesn't need to access the clustered index or heap for data. Any index can be covering, depending on the query.

    An INCLUDE adds columns to the index that are stored with the index, but aren't used as part of the searching. For example, if I had ProductID and Product Name in the index, I can use those in WHERE clauses or other filters. However, if UnitPrice is INCLUDEd, this is only useful if the query uses the column in the SELECT list. If we searched on WHERE UnitPrice > 10, this index isn't used. Think of this as other information added to the index that is returned to the user, but not used to run the query filters.