Skip to content
Advertisement

SQL Server indexing includes questions

I’ve been trouble shooting some bad SQL calls in my works applications. I’ve been reading up on indexes, tweaking and benchmarking things. Here’s some of the rules I’ve gathered (let me know if this sounds right):

  • For heavily used quires, boil down the query to only what is needed and rework the where statements to use the most common columns first. Then make a non clustered index on the columns used in the where statement and do INCLUDING on any remaining select columns (excluding large columns of course like nvarchar(max)).

  • If a query is going to return > 20% of the entries table contents, it’s best to do a table scan and not use an index

  • Order in an index matters. You have to make sure to structure your where statement like the index is built.

Now one thing I’m having trouble finding info on is what if a query is selecting on columns that are not part of any index but is using a where statement that is? Is the index used and leaf node hits the table and looks at the associated row for it?

ex: table

Id col1 col2 col3

CREATE INDEX my_index
ON my_table (col1)

SELECT Id, col1, col2, col3
FROM my_table
WHERE col1 >= 3 AND col1 <= 6

Is my_index used here? If so, how does it resolve Id, col2, col3? Does it point back to table rows and pick up the values?

Advertisement

Answer

To answer your question, yes, my_index is used. And yes, your index will point back to the table rows and pick the id, col2 and col3 values there. That is what an index does.

Regarding your ‘rules’

  • Rule 1 makes sense. Except for the fact that I usually do not ‘include’ other columns in my index. As explained above, the index will refer back to the table and quickly retrieve the row(s) that you need.

  • Rule 2, I don’t really understand. You create the index and SQL Server will decide which indices to use or not use. You don’t really have to worry about it.

  • Rule 3, the order does not really make a difference.

I hope this helps.

User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement