Sql-server – Interpreting an execution plan

indexsql server

I need some help analysing some simple t-sql execution plans.
I have a table [User] with the following 3 columns:

Id(Primary Key), Username(nvarchar(50)), FirstName(nvarchar(50))

I have Created an Unique NonClustered Index for the Username column

The execution plan for a query filtering by FirstName:

select * from [User] where FirstName ='John'

shows a Clustered Index Scan with a total cost of 0,0033095

The execution plan for another query filtering by Username:

select * from [User] where Username = 'johndoe'

shows a nested loop containing an Index Seek followed by a Clustered Index Seek with a total cost of 0,00657038! this is twice as much as the cost of the previous query and I don't get it!

There is an index associated with the Username column and no index associated with FirstName, I would expect the second query to be faster.

Best Answer

From your question I gather that your table is relatively small. As you put more rows in the table you'll find that the bookmark lookup stays about the same, and the scan takes longer and longer. Eventually the scan will cost many times more than the bookmark lookup.

As SQLMenace said, execution plan costs are often unreliable. Use Query Profiler or SET STATISTICS to see what resources are actually being consumed by each query.

Finally, make sure statistics are updated on your table or the engine can make poor choices about which indexes or tables to use in what order.