Das ist tatsächlich schwieriger als es aussieht - ein typisches modernes DBMS (und MS SQL Server ist keine Ausnahme) führt manchmal einen vollständigen Tabellenscan durch, selbst wenn ein Index verfügbar ist, einfach weil dies bei kleinen Datenmengen schneller sein könnte.
Beispiel:
-
Die letzte Anweisung in diesem SQL-Fiddle-Beispiel kann durch den Index erfüllt werden, doch der Abfrageplan deutete eindeutig auf einen Tabellenscan hin:
-
Aber wenn wir einige Daten einfügen , wird der Index verwendet:
Darüber hinaus kann die Entscheidung, die das DBMS trifft, davon beeinflusst werden, wie frisch/genau die Statistiken sind.
Der zuverlässigste Test, ob der Index verwendet wird, besteht darin, Ihre Datenbank einfach mit repräsentativen Datenmengen zu füllen und dann Sehen Sie sich den Ausführungsplan an . Und vergessen Sie nicht, die tatsächliche Ausführung der Abfrage zu timen, wenn Sie schon dabei sind!
Ein vereinfachtes Beispiel:Wenn die gesamte Tabelle in eine einzelne Datenbankseite passt, ist es schneller, diese Seite einfach zu laden und sie der Reihe nach durchzugehen, als auf die zusätzliche I/O für die Seite zu warten, die den Index enthält.