Freigeben über


Abfragetypen und Indizes

Wenn Sie die Erstellung eines Indexes für eine Spalte in Erwägung ziehen, sollten Sie berücksichtigen, wie die Spalte in Abfragen verwendet wird. Die folgenden Tabellen beschreiben die Abfragetypen, für die Indizes hilfreich sind.

HinweisHinweis

Die Beispiele in der Tabelle basieren auf der AdventureWorks2008R2-Beispieldatenbank. Wenn Sie die Beispiele in SQL Server Management Studio ausführen, können Sie die Indizes anzeigen, die vom Abfrageoptimierer ausgewählt werden, indem Sie den tatsächlichen Ausführungsplan anzeigen. Weitere Informationen finden Sie unter Vorgehensweise: Anzeigen eines tatsächlichen Ausführungsplans.

Abfrage, in der das Spaltenprädikat eines der folgenden Prädikate ist.

Abfragebeschreibung und -beispiel

In Erwägung zu ziehender Index

Genaue Übereinstimmung eines bestimmten Werts

Suchen nach einer genauen Übereinstimmung. Die Abfrage verwendet dabei eine WHERE-Klausel, um einen Spalteneintrag mit einem bestimmten Wert anzugeben. Beispiel:

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID = 228; 

Nicht gruppierter oder gruppierter Index für die BusinessEntityID-Spalte.

Genaue Übereinstimmung eines Werts in einer IN (x,y,z)-Liste

Suchen nach einer genauen Übereinstimmung des Werts in einer angegebenen Liste von Werten. Beispiel:

SELECT BusinessEntityID, JobTitle 
FROM HumanResources.Employee 
WHERE BusinessEntityID IN (288, 30, 15);

Nicht gruppierter oder gruppierter Index für die BusinessEntityID-Spalte.

Wertebereich

Suchen nach einem Wertebereich. Die Abfrage gibt dabei einen Eintrag an, dessen Wert zwischen zwei Werten liegt. Beispiel:

SELECT ProductModelID, Name
FROM Production.ProductModel
WHERE ProductModelID BETWEEN 1 and 5;

Oder:

WHERE ProductModelID >= 1 AND ProductModelID <= 5

Gruppierter oder nicht gruppierter Index für die ProductModelID-Spalte.

Join zwischen Tabellen

Suchen nach Zeilen in einer Tabelle, die einer Zeile in einer anderen Tabelle, basierend auf einem Joinprädikat, entsprechen. Beispiel:

SELECT a.ProductAssemblyID, b.Name, a.PerAssemblyQty
FROM Production.BillOfMaterials AS a
JOIN Production.Product AS b 
ON a.ProductAssemblyID = b.ProductID
WHERE b.ProductID = 900;

Nicht gruppierter oder gruppierter Index für die ProductID- und ProductAssemblyID-Spalte.

LIKE-Vergleich

Suchen nach entsprechenden Zeilen, die mit einer bestimmten Zeichenfolge wie z. B. 'abc%' beginnen. Beispiel:

SELECT CountryRegionCode, Name 
FROM Person.CountryRegion 
WHERE Name LIKE N'D%'

Nicht gruppierter oder gruppierter Index für die Name-Spalte.

Sortiert oder aggregiert

Erfordert eine implizite oder explizite Sortierreihenfolge oder eine Aggregation (GROUP BY). Beispiel:

SELECT a.WorkOrderID, b.ProductID, a.OrderQty, a.DueDate 
FROM Production.WorkOrder AS a
JOIN Production.WorkOrderRouting AS b 
ON a.WorkOrderID = b.WorkOrderID
ORDER BY a.WorkOrderID;

Nicht gruppierter oder gruppierter Index für die sortierte oder Aggregatspalte.

Ziehen Sie für Sortierspalten in Betracht, die ASC- oder DESC-Sortierreihenfolge der Spalte anzugeben.

PRIMARY KEY- oder UNIQUE-Einschränkung

Suchen nach doppelten Einträgen neuer Indexschlüsselwerte in Einfüge- und Aktualisierungsvorgänge, um PRIMARY KEY- und UNIQUE-Einschränkungen zu erzwingen. Beispiel:

INSERT INTO Production.UnitMeasure (UnitMeasureCode, Name, ModifiedDate)
VALUES ('OZ1', 'OuncesTest', GetDate());

Gruppierter oder nicht gruppierter Index für die in der Einschränkung definierte(n) Spalte(n).

UPDATE- oder DELETE-Vorgang in einer PRIMARY KEY/FOREIGN KEY-Beziehung

Suchen nach Zeilen in einem Aktualisierungs- oder Löschvorgang, bei der die Spalte an einer PRIMARY KEY/FOREIGN KEY-Beziehung beteiligt ist (mit oder ohne CASCADE-Option).

Nicht gruppierter oder gruppierter Index für die Fremdschlüsselspalte.

Spalte ist in der Auswahlliste, nicht jedoch im Prädikat enthalten.

Enthält eine oder mehrere Spalten in der Auswahlliste, die nicht für Suchen und Suchvorgänge verwendet wird. Beispiel:

SELECT Title, Revision, FileName
FROM Production.Document
WHERE Title LIKE N'%Maintenance%' AND Revision >= 0';

Nicht gruppierter Index mit der Angabe FileName in der INCLUDE-Klausel.