Auf einem Transaktionssystem kann es keinen wesentlichen Vorteil geben, einen Index auf eine solche Spalte zu setzen (d. H. Eine Spalte mit niedriger Kardinalitätsreferenz), da der Abfrageoptimierer sie wahrscheinlich nicht verwenden wird. Außerdem wird bei Schreibvorgängen in der Tabelle zusätzlicher Plattenverkehr generiert, da die Indizes aktualisiert werden müssen. Daher ist es für Kardinalitäten mit niedriger Kardinalität in einer Transaktionsdatenbank normalerweise besser, die Spalten nicht zu indizieren. Dies gilt insbesondere für hochvolumige Systeme.
Beachten Sie, dass Sie immer noch die FK für referenzielle Integrität wünschen und dass die FK-Suche in einer kleinen Referenztabelle wahrscheinlich keine E/A generiert, da die Lookup-Tabelle fast immer zwischengespeichert wird.
Sie können jedoch feststellen, dass Sie die Spalte aus irgendeinem Grund in einen zusammengesetzten Index einschließen möchten - vielleicht, um einen Deckungsindex für eine häufig verwendete Abfrage zu erstellen.
Auf einem Tisch, die häufig Massen geladen (beispielsweise ein Data-Warehouse) der Index Schreibverkehr wird viel größer sein als die der Tabellenlast ist, wenn Sie viele indizierte Spalten haben. Sie müssen wahrscheinlich die FKs und Indizes für eine Massenladung löschen oder deaktivieren, wenn Indizes vorhanden sind.
Auf einem Star Schema können Sie von der Indizierung niedriger Kardinalitätsspalten profitieren, sogar auf SQL Server. Wenn Sie eine hochselektive Abfrage durchführen (d. H. Eine, bei der der Abfrageoptimierer entscheidet, dass der zurückgegebene Zeilensatz klein ist), kann er einen "Sternabfrageplan" ausführen, bei dem eine Technik verwendet wird, die als Indexschnittpunkt bezeichnet wird.
Im Allgemeinen sollten Abfragepläne für ein Sternschema auf einem Tabellenscan der Fakttabelle oder einem hochselektiven Prozess basieren, der die Fakttabelle bucht und dann einen kleineren Satz von Zeilen zurückgibt. Die Indexüberschneidung ist für den letzteren Abfragetyp effizient, da die Auswahl vor dem Ausführen einer E/A in der Fakttabelle aufgelöst werden kann.
Bitmap-Indizes sind ein echter Gewinn für Spalten mit niedriger Kardinalität auf Plattformen wie Oracle, die sie unterstützen, aber SQL Server nicht. Dennoch können Kardinalitätsindizes weiterhin in Star-Abfrageplänen auf SQL Server verwendet werden.
Um einen SQL-Guru zu zitieren: "Wenn es keinen (primären) Schlüssel hat, ist es keine Tabelle" - also ja, selbst solch eine kleine Nachschlagetabelle sollte IMMER * einen Primärschlüssel haben - keine Diskussion. –