Announcement

Collapse
No announcement yet.

Verständnissfrage zum zusammengesetzten Index

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnissfrage zum zusammengesetzten Index

    Huhu Zusammen,

    ich beschäftige mich im Rahmen einer Ausbildung gerade mit Datenbanken und speziell mit MS-SQL.

    Ich habe hierzu mal eine Verständnisfrage zum Anlegen von Indizes. Ich habe eine Tabelle. Mal ein Beispiel (die Normalisierung bitte ignorieren):

    Tabelle Kunden:
    [Kudennummer], [Name], [Vorname], [PLZ], [Ort]

    Nun sollen 3 Abfragen erstellt werden. Eine Abfrage, die sich nur auf [Kundenummer] bezieht, eine Abfrage die sich auf [PLZ] und [Ort] bezieht und eine Dritte die sich nur auf [PLZ] bezieht.

    1. SELECT * FROM Kundenummer = X
    2. SELECT * FROM PLZ = Y AND ORT = Z
    3. SELECT * FROM PLZ = Y

    Nun sollen dafür die idealen Indizes gesetzt werden. Wenn ich mein Lehrmaterial richtig verstanden habe, müsste ich hierfür optimalerweise 3 Indizies anlegen

    1. CREATE INDEX UNIQUE IDX_Kunden_Kundenummer
    ON Kunden([Kundenummer])

    2. CREATE INDEX CLUSTERED IDX_Kunden_PLZ_Ort
    ON Kunden([PLZ], [Ort])

    3. CREATE INDEX IDX_Kunden_PLZ
    ON Kunden([PLZ])

    Bei der ersten Abfrage habe das Schlüsselwort UNIQUE verwendet, da die Kundenummer immer eindeutig ist.

    Bei der zweiten Abfrage habe ich das Schlüsselwort CLUSTERED verwendet, da die Abfragen sich auf 2 Spalten beziehen die immer in der gleichen Reihenfolge in der SELECT-Bedingung stehen.

    Bin ich damit auf dem Holzweg oder ist das so ok?

    Eine zweite Frage die ich noch habe:

    Wenn ich auf die Tabelle Kontakt mehrer Abfragen habe, die sich je auf eine Spalte beziehen, kann ich diese dann unter einem Indexnamen anlegen (ohne das Schlüsselwort CLUSTERED)?

    Beispiel:

    1. SELECT * FROM Vorname = X
    2. SELECT * FROM Name = Y

    Index dazu:
    CREATE INDEX IDX_Kunden_Namen
    ON Kunden([Name], [Vorname])

    Oder ist es besser für jedes Select oben einen eigene Indexnamen anzulegen?


    Derzeit sind Ferien und da kann ich nicht meinen Leher dazu fragen.
    Vielen Dank und liebe Grüße

    Maximilian Teufler

  • #2
    CLUSTERED hat eine andere Bedeutung, hier ein Auszug aus der MSDN:
    CLUSTERED

    Erstellt einen Index, in dem die logische Reihenfolge der Schlüsselwerte die physische Reihenfolge der entsprechenden Zeilen in einer Tabelle bestimmt. Die unterste Ebene oder Blattebene des gruppierten Index enthält die tatsächlichen Datenzeilen der Tabelle. Ein Tabelle oder Sicht kann immer nur einen gruppierten Index haben. Weitere Informationen finden Sie unter Gruppierte Indexstrukturen.....
    ... hat also nichts mit
    da die Abfragen sich auf 2 Spalten beziehen die immer in der gleichen Reihenfolge in der SELECT-Bedingung stehen.
    zu tun.


    bye,
    Helmut

    Comment

    Working...
    X