Verwendung von Indizes mit NVarchar(50) vs. NVarchar(255) - Spalte?
Wir haben eine indizierte Spalte ( ModelName
), die hat eine große Bedeutung in der Tabelle und ist sehr ähnlich zu einer "Katalog-Nummer", aber es ist nicht der PK.
viele ORDER by ModelName
; WHERE ModelName
etc, verwendet wird.
Die Spalte begann ursprünglich als NVarchar(50)
, aber die Größe verändert sich über die Zeit auf 100, und jetzt ist es notwendig, 255.
Habe ich gefunden, dass viele Beiträge auf "NVarchar(MAX) vs. NVarChar(N)"
, aber ich kann nicht eine schlüssige Antwort:
Gibt es einige/erhebliche performance-hit mit NVarchar(255)
statt NVarchar(100)
statt NVarchar(50)
speziell, wenn es um Indizes?
Ist eine kürzere Spalte Größe (50) besser als die längeren (255) in Bezug auf die Leistung? Und kann es sein, spezielle Einstellungen für solche Index um die Leistung zu verbessern?
Hier ist ein weiterer Verweis in die Kommentare von @a_horse_with_no_name:
Best practices für die SQL-varchar-Spalte Länge
Hinweis Antwort von Ariel: https://stackoverflow.com/a/8295195/1140885
Wo es heißt:
", Insbesondere, wenn dabei die Sortierung, größere Spalte machen mehr
Platz, also wenn das weh tut-performance, dann müssen Sie sich darum zu kümmern
und machen Sie kleiner."
und in den Kommentaren:
"Es gibt Probleme und Einschränkungen von Indizes zu betrachten, auch. Sie
kann nicht ein (a,b,c,d) index, wenn alle vier Spalten sind VARCHAR(255)"
Keine definitive Schlussfolgerung/Verweis auf docs etc.
- Es gibt keinen Unterschied zwischen
nvarchar(42)
,nvarchar(255)
odernvarchar(639)
in Bezug auf Leistung. Siehe auch hier: stackoverflow.com/q/8295131/330315 - Danke für den link, aber, tut
NVarchar
undVarchar
führen die gleiche? Meine Frage ist spezifisch fürNVarchar
. - Auch die Frage/Antwort, die Sie zur Verfügung gestellt (die sehr interessant ist, +1) nicht berücksichtigt Indizes überhaupt. Einfach in den Kommentaren, wo es vorgeschlagen, dass
"there are issues and limitations on indexes to consider, too. You can't have a (a,b,c,d) index when all four columns are VARCHAR(255)"
, und"Specifically, when doing sorting, larger column do take up more space"
... - Indizes sind nur betroffen, wenn Sie die Speicherung von mehr Daten in der Spalte. Ein index auf eine
varchar(10)
undvarchar(100)
Spalte wird dieselbe sein, wenn es speichert die gleichen Daten. Sollten Sie die Längenbeschränkung auf eine varchar/nvarchar-Spalte mehr wie eine Einschränkung, als eine technische Konfiguration. - aber auf eine
nvarchar(639)
Spalte, Sie würden nicht in der Lage sein, einen index zu erstellen, da die max. die Größe der Spalte ist größer als 900 byte Begrenzung auf einen index-Eintrag. Nur zu sagen. ... 🙂 - genau das, was ich dachte...
- guter Punkt, (ich bin mehr verwendet, um Oracle-und Postgres-wo ist dies kein problem)
Du musst angemeldet sein, um einen Kommentar abzugeben.
AUF einen Datentyp variabler Länge, die Indizes werden leiden, wenn Sie ständig anfallenden Daten. Je größer die Größe, desto mehr Chancen von Kombinationen in der B-Struktur, effektiv die Erhöhung der index-Größe. Irgendwann wird der index-Größe zu groß und die Abfragen leiden. Auf der anderen Seite, wenn Sie haben alle die gleichen Daten bekommen, als ModelName, es wird nicht viel von einem Problem
wenn die Modell-Namen sind wie AAABB, AAABC, AAACC etc es wird nicht töten Ihre Leistung, aber die standard-Abweichung von einer anderen hoch wird der index-performance wird schlechter aufgrund der schieren Größe