Ist es sinnvoll, die Größe von VARCHAR-Spalten zu unterschätzen?

18

Googeln um es scheint gemischte Berichte , ob die Größe eines sein VARCHAR2Spalte in Oracle Auswirkungen Leistung oder nicht.

Ich möchte der Frage nach der VARCHARGröße eine kleine Wendung geben und hoffe, einen Einblick in diese zu bekommen:

Angesichts von (mehrzeiligen) Freitextfeldern ( keine kurzen Angaben wie Namen), die Sie in einer (Oracle) -Datenbank speichern möchten, sollten Sie die Kapazität ( unter Oracle) nicht ausschöpfen, sondern nur auswählen Ein kleinerer Wert wie 1024 oder 512 ist wahrscheinlich in 98% der Fälle ausreichend.VARCHARVARCHAR2(4000)

Martin
quelle
Verwandte Tom Frage stellen
Vadzim

Antworten:

12

Dies wirkt sich auf die Speichernutzung aus, insbesondere wenn ein Client-Programm genügend Speicher zuweisen muss, um ein Dataset zu empfangen.

Beachten Sie, dass viele Apps (insbesondere Web-Apps) UTF-8 verwenden, einen Multibyte-Zeichensatz. Daher sollten Sie Zeichen und keine Bytes berücksichtigen.

Wenn ich mehr als tausend Zeichen erwartete, würde ich aktiv über einen CLOB nachdenken. Ich würde darüber nachdenken, ob es Klartext oder irgendeine Form von Markup (Wiki / HTML?) Speichern soll, das mit Nicht-Euro-Sprachen verwendet wird. Die Fragen und Antworten hier wären zum Beispiel CLOB, aber Kommentare können in eine VARCHAR passen.

Wenn Sie ein VARCHAR maximal ausnutzen, wird es in sechs Monaten jemand wieder vergrößern wollen, und Sie würden sich selbst dafür sträuben, dass Sie kein CLOB verwenden.

Gary
quelle
2
UTF-8 verwendet in der Regel ein Byte für ein Zeichen für westliche Sprachen. Es ist ein Multi-Byte-Format in dem Sinne, dass Multi-Byte-Escape-Sequenzen nicht-westliche Zeichen darstellen können.
Eric J.
9

Im Allgemeinen gibt es keine Überlegungen zur Leistung, obwohl es Nebenaspekte gibt , die für Sie von Bedeutung sein könnten. Das Limit für a varcharsollte wie jedes andere als Einschränkung aufgefasst werden - es dient dazu, eine Geschäftsregel durchzusetzen.

IMO lautet die Frage, die Sie stellen sollten: "Möchte ich verhindern, dass die in diesem Feld gespeicherten Freitextdaten länger als n Byte / Zeichen sind?" Dies ist der einzige entscheidende Faktor bei der Auswahl zwischen varchar(512)und varchar(4000).

Beachten Sie, dass ich davon ausgehe, dass Sie über varcharden SQL-Typ sprechen - die Situation ist anders, pl/sqlund die Auswahl der Länge kann aus Gründen der Speicherzuordnung entscheidend sein.

Jack Douglas
quelle
Vielen Dank. Meiner (sehr begrenzten) Erfahrung nach ist jede "Geschäftsregel", die ein Limit zwischen "500 - 3999" festlegt, einfach willkürlich, das heißt, jemand mochte die Nummer einfach. IMHO, wenn ich mich für Freitext entscheide und es keine Konsequenzen für die Implementierung gibt (der Kontext dieser Frage), ist entweder das Maximum erreicht (4000) oder es ist kein Freitext. --- Der Punkt, den ich in diesem Kommentar ansprechen möchte: Ich denke, es wird nie eine Geschäftsregel geben, die bei der Auswahl von BTW hilft. 512 und 4000 (es sei denn: "so viele Zeichen wie möglich")
Martin
Wenn es wirklich "so viele Zeichen wie möglich" sind clob, sollten Sie, wie @gary sagt, a in Betracht ziehen , nicht wahr ?
Jack Douglas
4

Wenn ein kleinerer Wert für 98% der Fälle geeignet ist, ein Varchar2 (4000) jedoch für 100% der Fälle erforderlich ist, haben Sie keine andere Wahl, als den größeren Wert zu verwenden . Das Erstellen einer separaten Tabelle für 2% der Werte und das anschließende Koordinieren von Einfügungen / Auswahlen usw. würde die Komplexität erhöhen, die alle Speicher- oder Leistungsvorteile zunichte macht, wenn das Feld nicht erweitert wird.

Leigh Riffel
quelle