Heim > Datenbank > MySQL-Tutorial > Verständnis der MySQL-Datentypen

Verständnis der MySQL-Datentypen

WJ
Freigeben: 2020-05-30 13:09:57
nach vorne
2059 Leute haben es durchsucht

Verständnis der MySQL-Datentypen

Verständnis der MySQL-Datentypen:

Aufgrund der einzigartigen Eigenschaften und Implementierungsdetails von MySQL, Die Auswirkungen auf die Leistung liegen auf der Hand, da es entscheidend ist, die MySQL-Datenbank gut zu gestalten. Beim Datenbankdesign müssen wir die Typauswahl von Tabellenfeldern erwähnen. Da MySQL viele Datentypen unterstützt, ist die Auswahl des richtigen Datentyps entscheidend, um eine hohe Leistung zu erzielen. Unabhängig davon, welche Art von Daten wir speichern möchten, müssen wir sie gemäß einigen Datenbankdesignprinzipien berücksichtigen.

Gedanken zur Auswahl von Datentypen

Kleiner ist normalerweise besser (Im Allgemeinen sollte wann immer möglich der kleinste Datentyp verwendet werden, der die Daten korrekt speichert.)

Warum?

(1) Weil kleinere Datentypen im Allgemeinen schneller sind, weil sie weniger Festplatte, Speicher und CPU-Cache belegen und weniger CPU-Zyklen für die Verarbeitung benötigen.
(2) Unterschätzen Sie nicht den Wertebereich, der gespeichert werden muss. Der kleinere Wert bezieht sich auf den maximalen Wertebereich des Datentyps.
(3) Wenn Sie sich nicht entscheiden können, welcher Datentyp der beste ist, wählen Sie den kleinsten Typ, der Ihrer Meinung nach den Bereich nicht überschreitet.

Einfach ist gut (Operationen an einfachen Datentypen erfordern normalerweise weniger CPU-Zyklen.)

Warum? Hier sind einige Beispiele, um zu veranschaulichen, warum.

(1) Ganzzahloperationen sind kostengünstiger als Zeichenfolgenoperationen, da Zeichenfolgensätze und Sortierregeln (Sortierungsregeln) Zeichenvergleiche komplexer machen als Ganzzahlvergleiche.
(2) Die in MySQL integrierten Typen (Datum, Uhrzeit, Datenzeit) sollten zum Speichern von Datum und Uhrzeit verwendet werden.
(3) Die IP-Adresse sollte im Integer-Typ (int) gespeichert werden.

Versuchen Sie NULL (leeren Wert) zu vermeiden

Warum?

(1) Viele Tabellen enthalten Spalten, die NULL sein können, auch wenn das Programm NULL nicht speichern muss, da das Standardattribut der Spalte darin besteht, dass sie NULL sein kann. Normalerweise ist es am besten, NOT NULL für eine Spalte anzugeben, es sei denn, Sie müssen wirklich NULL speichern.
(2) Wenn die Abfrage Spalten enthält, die NULL sein können, ist die Optimierung für MySQL schwierig, da NULL-Spalten Indizes, Indexstatistiken und Wertevergleiche komplexer machen. Spalten, die NULL sein können, belegen mehr Speicherplatz und erfordern eine spezielle Behandlung in MySQL. Wenn NULL-fähige Spalten indiziert werden, erfordert jeder Indexeintrag ein zusätzliches Byte, was sogar dazu führen kann, dass ein Index fester Größe in MyISAM zu einem Index variabler Größe wird.
(3) Normalerweise bringt die Änderung der NULL-fähigen Spalte in NOTNULL nur geringe Leistungsverbesserungen. Wenn Sie planen, einen Index für die Spalte zu erstellen, sollten Sie versuchen, sie nicht als NULL-fähige Spalte zu entwerfen. (Es gibt eine Ausnahme, das heißt, in InnoDB wird ein separates Bit zum Speichern von NULL-Werten verwendet, sodass eine gute Speicherplatzeffizienz für spärliche Daten erzielt wird.)

Zusammenfassung

Bei der Auswahl eines Datentyps für eine Spalte besteht der erste Schritt darin, den geeigneten großen Typ (Zahl, Zeichenfolge, Zeit usw.) zu bestimmen. Dies ist normalerweise sehr einfach, dann besteht der nächste Schritt darin, den spezifischen Typ auszuwählen.

Viele MySQL-Datentypen können denselben Datentyp speichern, aber die Speicherlänge und der Speicherbereich sind unterschiedlich, die zulässige Genauigkeit ist unterschiedlich oder der erforderliche physische Platz (Festplatten- und Speicherplatz) ist unterschiedlich. Verschiedene Untertypen von Daten desselben großen Typs weisen manchmal besondere Verhaltensweisen und Eigenschaften auf. Zum Beispiel: DATATIME Und TIMESAMP-Spalten können denselben Datentyp (Uhrzeit und Datum) speichern und sind sekundengenau. TIMESTAMP belegt jedoch nur die Hälfte des Speicherplatzes von DATATIME und verfügt über spezielle automatische Aktualisierungsfunktionen entsprechend Zeitzonenänderungen. Darüber hinaus ist der von TIMESTAMP zulässige Zeitbereich viel kleiner und seine Spezialfähigkeiten können manchmal zu Hindernissen werden, die wir Entwickler berücksichtigen müssen.

Ganzzahltyp

Es gibt zwei Arten von Zahlen: ganze Zahlen und reelle Zahlen.

Wenn Sie Ganzzahlen speichern, können Sie diese Ganzzahltypen verwenden: TINNYINT (8), SMALLINT (16), MEDIUMINT (24), INT (32), BIGINT (64).

Der Integer-Typ verfügt über ein optionales UNSIGNED-Attribut, was bedeutet, dass negative Werte nicht zulässig sind. Dies kann die Obergrenze positiver Zahlen ungefähr verdoppeln.

Zum Beispiel: TINYINT UNSIGNED kann den Bereich 0~255 speichern, während der Speicherbereich von TINYINT -127~128 beträgt.

Vorzeichenbehaftete und vorzeichenlose Typen nutzen denselben Speicherplatz und haben dieselben Funktionen .

So können Sie je nach tatsächlicher Situation den passenden Typ auswählen.

Ihre Wahl bestimmt, wie MySQL Daten im Speicher und auf der Festplatte speichert.

Integer wählt im Allgemeinen eine 64-Bit-BIGINT-Ganzzahl, auch in einer 32-Bit-Umgebung. (Aber einige Aggregatfunktionen sind Ausnahmen, sie werden mit DECIMAL oder DOUBLE berechnet)

Mysql kann die Breite für Ganzzahltypen angeben.

Zum Beispiel: INT (11), was für die meisten Anwendungen bedeutungslos ist: Es schränkt den zulässigen Wertebereich nicht ein, sondern legt nur fest, dass einige interaktive Tools von MySQL (z. B. der MySQL-Befehlszeilenclient) dies tun used Die Anzahl der angezeigten Zeichen. Für Speicher- und Berechnungszwecke sind INT(1) und INT(20) gleich.

Einige Speicher-Engines von Drittanbietern (z. B. Infobright) verfügen manchmal über angepasste Speicherformate und Komprimierungsschemata, die nicht unbedingt die übliche integrierte MySQL-Engine verwenden.

Realer Typ

Eine reelle Zahl ist eine Zahl mit einem Dezimalteil.

Sie speichern nicht nur den Dezimalteil in der Zukunft, sondern können DECIMAL auch verwenden, um ganze Zahlen zu speichern, die größer als BIGINT sind. MySQL unterstützt sowohl präzise als auch ungenaue Typen. Der Typ DECIMAL wird zum Speichern exakter Dezimalzahlen verwendet.

Präzisionsoperationen werden in Mysql5.0 oder höher unterstützt, es treten jedoch Ausnahmen auf, wenn Gleitkommaoperationen in Mysql4.1 und früheren Versionen verwendet werden (hauptsächlich verursacht durch Präzisionsverluste). Es können sowohl FLOAT- als auch DECIMAL-Typen verwendet werden . Geben Sie den Fortschritt an.

Für DECIMAL-Spalten können Sie die maximal zulässige Anzahl von Ziffern vor und nach dem Dezimalpunkt angeben, was sich auf den Platzverbrauch der Spalte auswirkt. Es gibt viele Möglichkeiten, die für FLOAT-Spalten (Gleitkomma) erforderliche Genauigkeit anzugeben, was dazu führt, dass MySQL stillschweigend einen anderen Datentyp auswählt oder den Wert beim Speichern abrundet. Diese Genauigkeiten entsprechen jedoch häufig nicht dem Standard, was auch der Fall ist Im Allgemeinen wird nur empfohlen, dass der angegebene Datentyp keine Genauigkeit angibt.

Aufgrund des zusätzlichen Platzes und des Rechenaufwands sollten Sie versuchen, nur DECIMAL zu verwenden, wenn Sie präzise Berechnungen mit Dezimalzahlen durchführen. Wenn beispielsweise beim Speichern von Finanzdaten die Datenmenge relativ groß ist, können Sie BIGINT anstelle von DECIMAL verwenden und die zu speichernde Währungseinheit entsprechend der Anzahl der Dezimalstellen mit dem entsprechenden Vielfachen multiplizieren. Die Typen FLOAT und DOUBLE unterstützen Näherungsberechnungen mit Standard-Gleitkomma-Arithmetik.

String-Typ

Mysql unterstützt mehrere String-Typen und es gibt viele Varianten jedes Typs. Unter diesen sind VARCHAR und CHAR die beiden wichtigsten String-Typen.

注意:Mysql存储引擎存储CHAR或者VARCHAR值的方式在内存中和在磁盘上可能不一样,所以Mysql服务器从存储引擎读取的值可能需要转换为另外一种存储格式。

Der Typ VARCHAR wird zum Speichern von Zeichenfolgen variabler Länge verwendet und ist der häufigste Zeichenfolgendatentyp.

VARCHAR ist platzsparender als Typen mit fester Länge, da es nur den erforderlichen Platz beansprucht (kürzere Zeichenfolgen verbrauchen weniger Platz).

VARCHAR benötigt 1 oder 2 zusätzliche Bytes, um die Länge der Zeichenfolge aufzuzeichnen.

VARCHAR spart Speicherplatz und ist daher hilfreich für die Leistung.

Im Folgenden sind einige Szenarien aufgeführt, in denen VARCHAR zur Verwendung geeignet ist:
(1) Die maximale Länge der Zeichenfolgenspalte ist viel größer als die durchschnittliche Länge.
(2) Spalten werden selten aktualisiert, sodass Fragmentierung kein Problem darstellt.
(3) verwendet einen komplexen Zeichensatz wie UTF-8 und jedes Zeichen verwendet eine andere Anzahl von Bytes zur Speicherung.

CHAR-Typ hat eine feste Länge. (Mysql weist immer genügend Speicherplatz basierend auf der definierten Zeichenfolgenlänge zu.)

CHAR eignet sich zum Speichern sehr kurzer Zeichenfolgen oder alle Werte haben nahezu die gleiche Länge.

Ähnliche Typen wie VARCHAR und CHAR sind BINARY und VARBINARY, die Binärzeichenfolgen speichern.

注意:使用VARCAHR(5)和VARCHAR(200)存储“hello”的空间开销都是一样的,那么使用更短的列有什么优势呢?(事实证明有很大的优势)

Längere Spalten verbrauchen mehr Speicher, da MySQL normalerweise Speicherblöcke mit fester Größe für die Speicherung interner Werte zuweist. Dies ist besonders schlimm, wenn temporäre In-Memory-Tabellen zum Sortieren oder für Vorgänge verwendet werden. Ebenso schlimm ist es beim Sortieren mithilfe temporärer Festplattentabellen.

注意:归根到底,最好的策略是只分配真正需要的空间。

BLOB- und TEXT-Typen

BLOB und TEXT sind Zeichenfolgendatentypen, die für die Speicherung großer Datenmengen konzipiert sind und jeweils Binär- und Zeichenmodi verwenden.

Tatsächlich gehören sie zu zwei verschiedenen Gruppen von Datentypfamilien: Zu den String-Typen gehören TINYTEXT, SMALLTEXT, TEXT, MEDIUMTEXT, LONGTEXT;

zu den Binärtypen gehören TINYBLOB, SMALLBLOB, BLOB, MEDIUMBLOB, LONGBLOB;

ENUM-Typ

Sie können eine Aufzählung (ENUM) anstelle des String-Typs verwenden. Oft wird empfohlen, Aufzählungsspalten anstelle häufig verwendeter Zeichenfolgentypen zu verwenden.

(1) Die Aufzählungsspalte kann einige eindeutige Zeichenfolgen in einer vordefinierten Sammlung speichern.
(2) MySQL ist beim Speichern von Aufzählungen sehr kompakt und wird je nach Anzahl der Listenwerte auf ein oder zwei Bytes komprimiert.
(3) MySQL speichert intern die Position jedes Werts in der Liste als Ganzzahl und speichert die „Nachschlagetabelle“ der Zuordnungsbeziehung „Zahlenzeichenfolge“ in der .frm-Datei der Tabelle.

注意:有一个令人吃惊的地方是,枚举字段是按照内部存储的整数而不是定义的字符串进行排序的。

注意:枚举最不好的地方是:字符串列表是固定的,添加或者删除字符串必须使用ALTER TABLE,因此对于一系列未来可能会改变的字符串,使用枚举并不是一个好主意,除非接受只能在列表末尾添加元素。

注意:由于Mysql把每个枚举值保存为整数,并且必须进行查找才能转换为字符串,所以枚举列有一些开销。

Datums- und Uhrzeittyp

Mysql verfügt über viele Typen, die Datums- und Zeitwerte speichern können, z. B. JAHR und DATUM.

Die minimale Zeitgranularität, die MySQL speichern kann, beträgt Sekunden (MariaDB unterstützt Ereignistypen auf Mikrosekundenebene). Aber MySQL kann auch Ad-hoc-Operationen mit einer Granularität im Mikrosekundenbereich ausführen.

Meistens gibt es keine Alternativen zu dem Typ, sodass es keine Frage gibt, was die beste Wahl ist.

Die einzige Frage ist dann, was beim Speichern von Datum und Uhrzeit zu tun ist.

DATETIME

(1) Dieser Typ kann einen breiten Wertebereich von 1001 bis 9999 mit einer Genauigkeit von Sekunden speichern.
(2) DATETIME kapselt Zeit und Datum in Ganzzahlen im Format YYYYMMDDHHMMSS, unabhängig von der Zeitzone.
(3) DATETIME belegt 8 Byte Speicherplatz.

TIMESTAMP

(1) Der Typ TIMESTAMP speichert die Anzahl der Sekunden seit Mitternacht am 1. Januar 1970, was mit dem UNIX-Zeitstempel identisch ist.
(2) TIMESTAMP belegt nur 4 Byte Speicherplatz, daher ist sein Bereich viel kleiner als der von DATETIME.
(3) Der von TIMESTAMP angezeigte Wert hängt von der Zeitzone ab.

Vergleich zwischen DATETIME und TIMESTAMP:

(1) Wenn der Wert der ersten TIMESTAMP-Spalte beim Einfügen nicht angegeben wird, setzt MySQL standardmäßig den Wert dieser Spalte auf die aktuelle Zeit. (Dies ist eine Funktion, die DATETIME nicht hat)
(2) Beim Einfügen einer Zeile mit Datensätzen aktualisiert MySQL standardmäßig auch den Wert der ersten TIMESTAMP-Spalte.
(3) Die TIMESTAMP-Spalte ist standardmäßig auf NOT NULL eingestellt, was sich von anderen Datentypen unterscheidet.

Zusammenfassung

(1) Zusätzlich zum besonderen Verhalten sollte TIMESTAMP nach Möglichkeit generell verwendet werden, da es platzsparender als DATETIME ist.
(2) Im Allgemeinen wird nicht empfohlen, UNIX-Zeitstempel als Ganzzahlwerte zu speichern. Das Speichern von Zeitstempeln im Ganzzahlformat ist normalerweise unpraktisch.
(3) Wenn Sie Datums- und Uhrzeitwerte mit einer kleineren Granularität als Sekunden speichern müssen, können Sie den Typ BIGINT verwenden, um Zeitstempel auf Mikrosekundenebene zu speichern, oder DOUBLE, um den Dezimalteil nach Sekunden zu speichern Verwenden Sie auch MariaDB anstelle von MySQL.

Bit-Datentyp

BIT definiert ein Feld, das ein einzelnes Bit enthält, BIT(2) speichert 2 Bits und die maximale Länge beträgt 64 Bits.

注意:一般建议谨慎使用BIT类型,对于大部分应用来讲最好避免使用这种类型。

Auswahl des Bezeichners

Es ist sehr wichtig, den geeigneten Datentyp für den Bezeichner (Identitätsspalte) auszuwählen.

Im Allgemeinen ist es wahrscheinlicher, die Identitätsspalte zum Vergleich mit anderen Werten zu verwenden oder andere Spalten über die Identitätsspalte zu finden.

Bei der Auswahl des Typs der Identitätsspalte müssen Sie nicht nur den Speichertyp berücksichtigen, sondern auch, wie MySQL Berechnungen und Vergleiche für diesen Typ durchführt.

Sobald Sie einen Typ ausgewählt haben, stellen Sie sicher, dass Sie in allen zugehörigen Tabellen denselben Typ verwenden.

Unter der Voraussetzung, dass die Bereichsanforderungen des Werts erfüllt werden können und Raum für zukünftiges Wachstum reserviert ist, sollte der kleinste Datentyp ausgewählt werden.

注意:整数通常是标识列最好的选择,因为它们很快而且可以使用AUTO_INCREMENT。注意:ENUM和SET是最糟糕的选择了;如果可能也尽可能避免使用字符串作为标识列,因为它们很消耗空间并且通常比数字类慢。

Volltextzusammenfassung

Beim Datenbankdesign müssen Sie zweimal überlegen, bevor Sie den am besten geeigneten Datenspaltentyp auswählen und sich für den entscheiden Die Größe der Datenspalte ist ein entscheidender Schritt. Tatsächlich besteht kein Grund zur Panik, unabhängig vom Design der Datentabelle für jede Art von Anforderung. Sie müssen sich nur an ein Prinzip erinnern, ein sehr wichtiges, sehr wichtiges Prinzip: Verwenden Sie den kleinsten Datentyp, der korrekt gespeichert werden kann Daten so weit wie möglich.

Oben geht es um das Verständnis der MySQL-Datentypen.

Verwandte ReferenzenPHP chinesische Website

Das obige ist der detaillierte Inhalt vonVerständnis der MySQL-Datentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51dev.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage