Will SQL Server verwenden, um eine Verbindung Index, wenn nur eine einzelne Spalte in der WHERE-Klausel ist?

StackOverflow https://stackoverflow.com/questions/2228192

Frage

Sprich ich habe eine Tabelle:

CREATE TABLE Users (
    Id INT IDENTITY (1, 1),
    FirstName VARCHAR(40),
    LastName VARCHAR(40)
)

Abfragen sind in der Regel auf Vorname oder Name , sondern auch auf Vorname und Name .

Wenn ich einen nicht gruppierten Index auf Vorname erstellen und eine andere auf Name , dann meine ersten beiden Abfragen werden dabei berücksichtigt. Anscheinend wird SQL Server Index Kreuzung für die andere Abfrage verwenden.

Alternativ kann, wenn ich indexees auf (Vorname) haben und auf (Nachname, Vorname), kann / nicht verwendet SQL Server den zweiten Index für Abfragen auf nur Name sowie Abfragen auf beide

Enthalten SQL Server-Speicher-Verbindung Index Teile von links nach rechts oder von rechts nach links? Mit anderen Worten: es wird den Schlüssel als LastNameFirstName oder Vornamenachname bauen? Oder ist es kostenlos eine willkürlich wählen?

War es hilfreich?

Lösung

  

kann / wird SQL Server verwenden Sie den Index (Nachname, Vorname) für Abfragen auf nur Name VZ sowie Abfragen auf beides?

Ja, wird die Datenbank verwenden Sie den Index (Nachname, Vorname) für Abfragen auf Name VZ. Es wird nicht Mit diesem Index nur für Abfragen verwendet auf First though.

  

Ist es speichert Verbindung Index Teile von links nach rechts oder von rechts nach links?

Die Lagerung erfolgt in einem B-Baum . Ob halten Sie davon, wie die gespeichert von rechts nach links oder von links nach rechts nur einer nützlichen Visualisierungen Hilfe ist, und nicht auf die tatsächliche Datenspeicherung.

Andere Tipps

Ja, wenn Sie auf Namen VZ Abfrage allein sollte es verwenden, um den (Nachname, Vorname) Index. So ist es verwendet werden würde, sowohl wenn sie allein durch Name VZ Abfrage oder Nachname und Vorname zusammen.

Allgemeine Richtlinie ist die Spalte mit der größten Selektivität zu gewährleisten, erscheint zuerst in der Verbindung Index, da dies die am meisten davon profitieren liefert / verengt den resultset früher, bevor Folgendes weniger selektiv Spalten.

auf der tatsächliche Abfrage Je Sie senden, ein Composite-Index auf zwei Säulen kann auch dann verwendet werden, wenn Sie für die 2. Spalte suchen nur. Sie werden jedoch nicht um einen Index suchen, aber höchstwahrscheinlich um einen Index-Scan. Wenn diese „gut genug“ für Sie ist, hängt von Ihrer spezifischen Umgebung. Die Indizierung ist eher eine Kunst als eine Wissenschaft und viele andere Faktoren beeinflussen Ihre Entscheidung, wie man Index einer Tabelle. Es ist immer ein Kompromiss, da zu viele Indizes auf einem Tisch ist genauso schlecht wie zu wenig hat. Stellen Sie sicher, dass Ihre wichtigsten Abfragen gut abgedeckt werden und dann entscheiden, auf einer von Fall zu Fall, ob eine zusätzliche Indexwert ist ihre Kosten.

Auch, wie es wurde nicht erwähnt noch und bereitgestellt sind Sie zumindest auf SQL Server 2005: Lassen Sie mich werfen in die Klausel enthalten, für nicht gruppierte Indizes. Es ist ein übersehener, aber wirklich nützliche Ergänzung für jede Indexierungsstrategie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top