Wenn ich ein Dateneingabefeld in einer SQL Server-Tabelle habe, kann ich es effizient indizieren?

Wenn ich ein Dateneingabefeld in einer SQL Server-Tabelle habe, kann ich es effizient indizieren?

Ich habe eine Backend-SQL-Server-Datenbank. Meines Wissens sind Cluster-Indizes am effizientesten, aber sie sortieren die Seiten physisch, um sie effizient zu machen. Wenn es sich also um ein vom Benutzer eingegebenes Feld handelt, muss sich die gesamte Tabelle jedes Mal neu strukturieren, wenn ein neuer Datensatz hinzugefügt wird.

Das kann nicht effizient sein. Ist es in diesem Fall effizient, einem Feld einen regulären Index zuzuweisen? Oder würden Sie es einfach unindiziert lassen?

Antwort1

Als allgemeine Regel sollten Sie für Identitätsfelder wirklich nur Cluster-Indizes verwenden, und Autonummern sind am besten, da sie immer weiter ansteigen. Das Aktualisieren einer Identitätsspalte sollten Sie etwa einmal pro Jahrtausend durchführen, und auf keinen Fall zur Laufzeit der Anwendung. Sie sollten also Seiteninhalte nie über eine Standard-DML-Anweisung neu anordnen müssen.

Innerhalb dieser Einschränkungen sind Cluster-Indizes sehr, sehr effizient, aber wie Sie anmerken, können sie bei falscher Verwendung die Leistung von DML-Anweisungen für das indizierte Feld erheblich beeinträchtigen.

Die kurze Antwort lautet also: Verwenden Sie keine gruppierten Indizes für vom Benutzer eingegebene Felder.

Was nicht gruppierte Indizes betrifft, können sie je nach Verwendung ein großer Vorteil oder ein Nachteil sein. NCIs sind sehr gut darin, eine oder eine kleine Anzahl von Zeilen abzurufen, aber die Größe des Index wächst mit jedem hinzugefügten Feld. Komplizierte Indizes mit vielen Feldern oder Indizes, die eine Abfrage nur für eine große Anzahl von Zeilen auflösen können, bieten daher zumindest nicht die Vorteile und sind oft eher ein Hindernis als ein Nutzen.

verwandte Informationen