Hi,
grundsätzlich: Indizes auf Tabellen, wo viel gelesen und weniger geschrieben wird sind immer gut - wenn man sie auf die richtigen Spalten setzt.(Punkt)
U.U. kannst du mit einem einzelnen Index (bestehend aus mehreren Spalten) bereits eine gesamte Abfrage bedienen.
Du weisst aber schon im Allgemeinen, was Indizes sind?
Stored Procedures und Ausführungspläne haben direkt nicht wirklich viel miteinander zu tun. Einen Ausführungsplan lässt du dir errechnen mit einem Klick im Management Studio unter dem Menü "Query" -> "Display estimated execution plan", bzw. "Include actual execution plan". (Ja, das gibt es Unterschiede, die musst du in deinem Stadium aber noch nicht wissen.)
Ein Ausführungsplan ist wie ein Sequenz/Ablaufdiagramm wo dir der Sql Server anzeigt, welche Objekte (Tabellen, Indizes) er benutzt und welche Operationen (Key Lookup, Bookmark Lookup, Spool ....) er benutzt um die Daten zusammenzuführen, deren Menge du beschrieben hast.
Grundsätzlich gilt es "Table Scans" und "Clustered Index Scans" zu minimieren durch geeignetes Setzen von Indices.
Ein Index wird vom Sql Server Query Optimizer auch nur dann benutzt, wenn die erste Spalte aus dem Index auch in der Abfrage benutzt wird - nur so mal nebenbei.
BTW: Du kannst mich gern für 1600 € / Tag netto engagieren für Tuning deiner MS Sql Server Datenbank.
Wenn du zwei Queries vergleichen willst hinsichtlich Qualität oder Leistung, dann pack sie untereinander und lass dir für beide zusammen den "estimated execution plan" anzeigen. Da bekommst du dann zwei Ausführungspläne mit einem prozentualen Wert für den Aufwand. Der mit < 50% ist dann "besser".
Warum SELECT * suboptimal ist, dazu findest du hier im Forumsarchiv genügend Hinweise.
Ciao, Frank