Wahrscheinlich gibt es auch manche guten Gründe, warum ein Table Scan einem Index Seek vorzuziehen ist, allerdings fallen diese mir im Moment nicht an. Der dokumentierte Weg hierfür ist die Verwendung folgenden Zusatzes im SELECT Statement:
SELECT < Spalten > FROM < Tabelle > with (INDEX = 0)
Dieser Zusatz veranlaßt SQL Server sämtliche evtl. vorhandenen Indexes auf dieser Tabelle zu ignorieren und erzwingt damit einen Table Scan.
Dieser läßt sich relativ leicht in der PUBS Beispieldatenbank nachvollziehen.
USE PUBS GO SET SHOWPLAN_TEXT ON GO SELECT au_lname FROM authors StmtText ----------------------------------------------------------- |--Index Scan(OBJECT:([pubs].[dbo].[authors].[aunmind])) (1 row(s) affected)
Wie zu erwarten war, benutzt SQL Server den Index aunmind. So, fügt man nun den Zusatz WITH (INDEX=0) hinzu, ergibt sich folgender Ausführungsplan:
USE PUBS GO SET SHOWPLAN_TEXT ON GO SELECT au_lname FROM authors WITH(INDEX=0) StmtText --------------------------------------------------------------------------- |--Clustered Index Scan(OBJECT:([pubs].[dbo].[authors].[UPKCL_auidind])) (1 row(s) affected)
SQL Server führt nun einen Clustered Index Scan durch, was im Endeffekt ein Table Scan unter anderem Namen ist.







