In a SQL Server Execution plan what is the difference between an Index Scan and an Index Seek
I\'m on SQL Server 2005.
The basic rule to follow is Scans are bad, Seeks are good.
Index Scan
When SQL Server does a scan it loads the object which it wants to read from disk into memory, then reads through that object from top to bottom looking for the records that it needs.
Index Seek
When SQL Server does a seek it knows where in the index that the data is going to be, so it loads up the index from disk, goes directly to the part of the index that it needs and reads to where the data that it needs ends. This is obviously a much more efficient operation than a scan, as SQL already knows where the data it is looking for is located.
How can I modify an Execution Plan to use a Seek instead of a Scan?
When SQL Server is looking for your data probably one of the largest things which will make SQL Server switch from a seek to a scan is when some of the columns are you looking for are not included in the index you want it to use. Most often this will have SQL Server fall back to doing a clustered index scan, since the Clustered index contains all the columns in the table. This is one of the biggest reasons (in my opinion at least) that we now have the ability to INCLUDE columns in an index, without adding those columns to the indexed columns of the index. By including the additional columns in the index we increase the size of the index, but we allow SQL Server to read the index, without having togo back to the clustered index, or to the table it self to get these values.
References
For information regarding the specifics of each of these operators within a SQL Server Execution plan see....
Clustered Index Scan - Books Online
Clustered Index Seek - Books Online