Gibt es für 'große' Tabellen einen Grund, die Indizes für optionale Spalten nicht zu filtern?
Also für einen Index auf Spalte AAA (weil Leute AAA suchen können),
Ich kann den Filter auf ([AAA] IS NOT NULL)
setzen.
Das spart Speicher, spart also Geld.
Einige weitere Vorteile von technet :
Die Leute sagen, dass es gut ist, einen Filter auf einen Index für Spalten zu setzen, die meistens leer sind. Aber warum sollte ich keinen Filter auf Indizes für Spalten setzen, die für 1% leer sind? Gibt es einen Grund, es nicht zu tun, wenn es nur Vorteile hat?
Das ist normalerweise eine gute Idee mit zwei Problemen:
select distinct col from T
wird den Index nicht verwenden, da möglicherweise ein Nullwert gefunden wird. Verwenden Sie dies: select distinct col from T where col is not null
. Gefilterte Indizes werden zu wenig genutzt. Sie können sogar verwendet werden, um eine NULL-fähige Spalte eindeutig zu machen.
Meine praktische Empfehlung: Probieren Sie es einfach für ein paar Monate aus und lernen Sie selbst, ob es weitere unvorhergesehene Probleme gibt.
Wenn Sie mit erweiterten Abfragetechniken für SQL Server arbeiten, sehen Sie auch Anzeigen mit indizierten Sichten. Es gibt eine Reihe von gefilterten Indizes (zumindest für Enterprise).
Alle Indizes haben Vor- und Nachteile: Nachteile:
Vorteile:
Wie es normalerweise kommt, kommt es darauf an.
Manche Leute verdienen sehr viel davon, ihre Sachen über Indizes wirklich zu kennen: Es gibt unglaublich gute Sachen hier Ссылка
Es hängt also davon ab, wie oft Benutzer Daten zurückgeben, auf die der Index verweist, und wie oft sie die über den Index enthaltenen Daten aktualisieren.
Die Indizes für dünn besetzte Spalten unterscheiden sich nicht. Wenn die Spalte jedoch (weitgehend) leer ist, sind gefilterte Indizes effizienter. Sobald die Seltenheit abnimmt (z. B. 50/50), kann die Verteilung der Daten sehr wichtig werden, wenn der Optimierer den besten Plan zum Zurückgeben der Daten entscheidet. Ein gefilterter Index wird die Verteilung für Daten außerhalb des Filters nicht kennen - offensichtlich, aber es muss gesagt werden.
Tags und Links sql sql-server-2008 indexing filtered-index