Database
 sql >> Datenbank >  >> RDS >> Database

So wählen Sie die richtigen Datentypen aus

Da die Datenmenge eines typischen Unternehmens exponentiell angewachsen ist, wird es noch wichtiger, die Datenspeicherung zu optimieren. Die Größe Ihrer Daten wirkt sich nicht nur auf die Speichergröße und die Kosten aus, sondern auch auf die Abfrageleistung. Ein Schlüsselfaktor bei der Bestimmung der Größe Ihrer Daten ist der von Ihnen ausgewählte Datentyp. Dieses Tutorial erklärt, wie man die richtigen Datentypen auswählt.

Was sind Datentypen?

Datentypen Definieren Sie, welche Art und welcher Bereich von Daten in einem bestimmten Feld (oder einer bestimmten Spalte) gespeichert werden können.

Stellen Sie sich eine Verkaufstabelle mit diesen Beispieldatensätzen vor:

Jedes Feld hat seinen eigenen Typ und Wertebereich:

purchase_time :Datum und Uhrzeit des Verkaufssale_id :ganzzahlige Werte, die für jeden neuen Verkaufcustomer_id um eins erhöht werden :Integer-Werte, die für jede neue Kunden-Währung um eins erhöht werden :Text immer im dreistelligen Währungscodebezahlter Betrag :monetäre reelle numerische Werte zwischen 0,00 $ und 1.000,00 $Gerät :Text, wobei die Werte sein können:„Desktop“, „mobile App“ und „mobiles Web“has_discount :boolean wobei Einträge TRUE sein können oder FALSE Notizen :Text, in dem die Eingabe so lang sein kann, wie es in unserem Eingabetool für Agenten zulässig ist (250 Zeichen)

Die Art der Daten (Ganzzahlen, Text, reelle Zahlen usw.) und die möglichen Wertebereiche (0 bis 1.000; beliebige 3 Zeichen; usw.) entsprechen bestimmten Datenbank-Datentypen .

Was sind die möglichen Datentypen?

Verschiedene Datenbanken haben unterschiedliche Datentypen zur Verfügung, aber die meisten passen in diese Kategorien:

Numerisch:

  • Ganzzahlen :für Zahlen ohne Brüche. Kann vorzeichenbehaftet (positive und negative Werte zulassen) oder vorzeichenlos (nur positive Zahlen zulassen) sein. Wird häufig für ID-Felder und Zählungen von etwas verwendet
  • dezimal(x,y) :für Zahlen mit Brüchen, die eine genaue Genauigkeit erfordern. Kann vorzeichenbehaftet (positive und negative Werte zulassen) oder vorzeichenlos (nur positive Zahlen zulassen) sein. Wird häufig für monetäre Felder verwendet. Der Benutzer gibt die Anzahl der zulässigen signifikanten Stellen insgesamt (x) und nach dem Dezimalpunkt (y) in Klammern an
  • Float / Doubles :für Zahlen mit Brüchen, die keine genaue Genauigkeit erfordern. Kann vorzeichenbehaftet (positive und negative Werte zulassen) oder vorzeichenlos (nur positive Zahlen zulassen) sein. Wird häufig für alle reellen Zahlen verwendet, mit Ausnahme von Währungsfeldern

Datum/Uhrzeit:

Datum :für Datumswerte

  • Zeit :für Zeitwerte
  • Zeitstempel/DatumUhrzeit :für Datums- und Zeitwerte

Text:

  • Zeichen(n) :für Zeichenfolgen mit fester Länge, wobei der Wert in der Klammer die feste Größe jedes Eintrags vorgibt
  • varchar(n) :für Zeichenfolgen variabler Länge, wobei der Wert in Klammern die maximal akzeptierte Größe jedes Eintrags vorgibt

Boolesch:

  • boolesch :für boolesche (wahr/falsch) Werte. Einige Datenbanken (wie MySQL) haben keinen booleschen Datentyp und wandeln stattdessen boolesche Werte in ganze Zahlen um (1 =TRUE, 0 =FALSE)

Die meisten Datenbanken bieten Größenvariationen für jeden Typ an. Beispielsweise bietet MySQL diese möglichen Integer-Datentypen:

Wie man die richtigen Datentypen auswählt

Die grundlegende Strategie für die Auswahl des besten Datentyps besteht darin, den kleinsten Datentyp auszuwählen, der zu der Art von Daten passt, die Sie haben, und der alle möglichen Werte Ihrer Daten zulässt.

Beispiel:customer_id in unserer Beispielverkaufstabelle ist eine ganze Zahl, die mit 0 beginnt. Heute hat unser fiktives Unternehmen nur 15.000 Kunden. Unter Verwendung der MySQL-Ganzzahl-Datentyptabelle aus dem vorherigen Abschnitt könnten wir versucht sein, SMALLINT auszuwählen unsigned als Datentyp, da dies der kleinste Datentyp ist, der unsere aktuellen ganzzahligen Werte von 0 bis 15.000 akzeptiert. Wir gehen jedoch davon aus, in den nächsten 6-12 Monaten 100.000 Kunden zu erreichen. Wenn wir über 65.535 gehen, wird SMALLINT wird nicht mehr ausreichen. Eine bessere Auswahl ist daher MEDIUMINT unsigniert, was uns für die nächsten Jahre abdecken sollte.

Sie könnten Ihre Datenbank Datentypen für Sie auswählen lassen, wenn Sie Ihre Tabelle mit Beispieldatensätzen erstellen. Dadurch erhalten Sie jedoch selten die beste Datentypauswahl. MySQL beispielsweise die Datentypen für eine Verkaufstabelle mit den zuvor gezeigten Beispielwerten auswählen zu lassen, führt zu mehreren Problemen.

Die Probleme, auf die wir bei den automatisch ausgewählten Datentypen von MySQL stoßen, sind:

  1. Falscher Datentyp :Sie können das Feld nicht so verwenden, wie Sie es erwarten würden. Beispiel:purchase_time als Zeichenfolge und nicht als Zeitdatentyp bedeutet, dass Sie keine Zeitoperationen (z. B. die Berechnung, wie lange es seit dem Kauf her ist) für das Feld ausführen können
  2. zu eingeschränkt :MySQL gibt Fehler aus, wenn Sie versuchen, Werte einzugeben, die größer sind als der Datentyp zulässt. Beispielsweise erhalten wir Fehler, wenn wir einen Verkauf mit einem Betrag_bezahlt von 100,00 $ oder mehr oder einen Agentenkommentar haben, der länger als 65 Zeichen ist
  3. zu konservativ :Während nichts davon abbricht, mit Datentypen zu konservativ zu sein, werden Sie Speicherplatz verschwenden. Mit unseren Beispieldaten könnten wir 15 % Speicherplatz sparen, indem wir die weniger konservativen bevorzugten Optionen verwenden

So schlau moderne Datenbanken auch sind, die Eigentümer der Daten wissen immer noch am besten, welche Art von Daten gespeichert werden und welche möglichen Werte die Daten in absehbarer Zeit annehmen können. Daher müssen Sie die Datentypen für jedes Ihrer Felder sorgfältig spezifizieren.

Dokumentation zu Datentypen für verschiedene gängige Datenbanken finden Sie hier:

  • MySQL
  • Amazon Redshift
  • Apache Hive
  • Teradaten

Schlussfolgerung

Damit Ihre Datenbank richtig funktioniert und so optimiert wie möglich ist, ist es wichtig, die Datentypen für jedes Feld in Ihren Tabellen sorgfältig auszuwählen.