Warum wird NULL so oft verwendet?(1) Javas Null Null ist ein Problem, wie z. B. NullPointerException in Java. Um unerwartete Nullzeiger zu vermeiden, müssen Sie verschiedene if-Beurteilungen sorgfältig vornehmen, was mühsam und aufwändig ist. Aus diesem Grund gibt es viele Open-Source-Pakete, die viele Verarbeitungs allgemeine lang3s StringUtils.isBlank(); CollectionUtils.isEmpty(); Guaven optional Sogar Java 8 hat Optional eingeführt, um dieses Problem zu vermeiden (ähnlich wie Guava, mit leicht anderer Verwendung). (2) Warum wird MySQLs Null so häufig missbraucht? (a) Das Erstellen von nicht standardmäßigen Nullen ist die Standardeinstellung beim Erstellen einer Datentabelle. Einige MySQL-Clients geben in ihren automatisch generierten Tabellenanweisungen möglicherweise nicht „not null“ an. (b) Manche Leute denken vielleicht, dass nicht null mehr Platz benötigt. (c) Um Probleme zu vermeiden, müssen beim Einfügen von Daten während der Entwicklung keine Nullwerte beurteilt werden, was das Schreiben von SQL erleichtert 2. Offizielle DokumenteNULL-Spalten benötigen zusätzlichen Platz in der Zeile, um aufzuzeichnen, ob ihre Werte NULL sind. Bei MyISAM-Tabellen benötigt jede NULL-Spalte ein zusätzliches Bit, aufgerundet auf das nächste Byte. MySQL hat Schwierigkeiten bei der Optimierung von Abfragen, die auf nullbare Spalten verweisen, was Indizes, Indexstatistiken und Werte komplexer macht. Nullable-Spalten benötigen mehr Speicherplatz und erfordern eine spezielle Verarbeitung in MySQL. Nachdem die nullfähige Spalte indiziert wurde, benötigt jeder Datensatz ein zusätzliches Byte und kann auch dazu führen, dass der Index mit fester Größe in MYISAM zu einem Index mit variabler Größe wird. —— Aus „High Performance MySQL Second Edition“ Es scheint, dass es keinen Leistungsvorteil bringt, wenn man nicht „not null“ angibt. Drei Gründe, warum MySQL kein Null verwendet(1) Alle Situationen, in denen NULL-Werte verwendet werden, können durch einen aussagekräftigen Wert dargestellt werden, was der Lesbarkeit und Wartbarkeit des Codes förderlich ist und die Standardisierung von Geschäftsdaten aus Sicht der Einschränkungen verbessern kann. (2) Aktualisierungen von NULL-Werten auf Nicht-NULL-Werte können nicht direkt vor Ort durchgeführt werden, wodurch die Wahrscheinlichkeit einer Indexaufteilung erhöht wird und somit die Leistung beeinträchtigt wird. (Die Leistungsverbesserung von null -> nicht null ist sehr gering. Betrachten Sie es daher nicht als vorrangige Optimierungsmaßnahme, es sei denn, Sie sind sicher, dass es Probleme verursacht.) (3) NULL-Werte sind anfällig für Probleme im Zeitstempeltyp, insbesondere wenn der Parameter explicit_defaults_for_timestamp nicht aktiviert ist. (4) Abfragen mit negativen Bedingungen, wie etwa NOT IN und !=, liefern bei einem NULL-Wert immer leere Ergebnisse, was die Abfrage fehleranfällig macht. Vier schlimme Fälle durch NullDateninitialisierung: Tabelle erstellen table1 ( `id` INT (11) NICHT NULL, `name` varchar(20) NICHT NULL ) Tabelle erstellen table2 ( `id` INT (11) NICHT NULL, `Name` varchar(20) ) in Tabelle1 Werte einfügen (4,"zhaoyun"),(2,"zhangfei"),(3,"liubei") in Tabelle2 Werte einfügen (1,"zhaoyun"),(2, null) (1) Eine NOT IN-Unterabfrage gibt bei einem NULL-Wert immer ein leeres Ergebnis zurück und die Abfrage ist fehleranfällig. Wählen Sie den Namen aus Tabelle1, wo der Name nicht drin ist (wählen Sie den Namen aus Tabelle2, wo ID!=1) +-------------+ | Name | |-------------| +-------------+ (2) Spaltenwerte dürfen leer sein, der Index speichert keine Nullwerte und diese Datensätze sind nicht im Ergebnissatz enthalten. Wählen Sie * aus Tabelle2, wobei Name != 'zhaoyun' +------+----------+ | Ich würde | Name | |------+----------| | | | +------+----------+ Wählen Sie * aus Tabelle2, wobei Name != 'zhaoyun1' +------+----------+ | Ich würde | Name | |------+----------| | 1 | simon_simon | +------+----------+ (3) Wenn Sie concat verwenden, müssen Sie zunächst prüfen, ob die einzelnen Felder ungleich null sind. Andernfalls ist das verkettete Ergebnis null, wenn ein beliebiges Feld leer ist. wähle concat("1", null) aus dual; +--------------------+ | concat("1", null)| |--------------------| | NULL | +--------------------+ (4) Bei der Berechnung der Anzahl werden Nullspalten nicht in die Statistik einbezogen. Wählen Sie Anzahl(Name) aus Tabelle2; +--------------------+ | Anzahl(Benutzername) | |--------------------| | 1 | +--------------------+ Vergleich von fünf IndexlängenTabelle ändern, Tabelle1, Index hinzufügen, idx_name (Name); Tabelle ändern, Tabelle2, Index idx_name (Name) hinzufügen; Erläutern Sie „select * from table1 where name='zhaoyun';“ Erläutern Sie „Select * from table2“, wobei Name = „zhaoyun“ ist. key_len von Tabelle1 = 82 key_len von Tabelle2 = 83 Die Berechnungsregeln von key_len hängen von drei Faktoren ab: Datentyp, Zeichenkodierung und ob es NULL ist key_len 82 = 20 * 4 (utf8mb4 – 4 Bytes, utf8 – 3 Bytes) + 2 (die Länge zum Speichern von Varchar-Zeichen mit variabler Länge beträgt 2 Bytes, und Felder mit fester Länge erfordern keine zusätzlichen Bytes) key_len 83 = 20 * 4 (utf8mb4 – 4 Bytes, utf8 – 3 Bytes) + 2 (varchar-Zeichen mit variabler Länge werden in 2 Bytes gespeichert, Felder mit fester Länge erfordern keine zusätzlichen Bytes) + 1 (Null-Flag) Daher ist es am besten, das Indexfeld nicht auf NULL zu setzen, da NULL den Index, die Indexstatistiken und die Werte komplizierter macht und ein zusätzliches Byte Speicherplatz erfordert. Dies ist das Ende dieses Artikels darüber, wie man Null in MySQL-Felddefinitionen vermeidet. Weitere Informationen zu Null in MySQL-Felddefinitionen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Diskussion zum Problem der Initialisierung von Iframe-Knoten
>>: Implementierungsschritte zum Erstellen eines FastDFS-Dateiservers unter Linux
Als ich mir heute die Laborprojekte ansah, stieß ...
Beim Arbeiten mit Dateien im Linux-Terminal möcht...
Inhaltsverzeichnis Hintergrund analysieren Datens...
Inhaltsverzeichnis A. Docker-Bereitstellung des S...
Dies führte auch dazu, dass PNG-Dateien nicht hoch...
In diesem Artikel wird der spezifische JavaScript...
Vorwort: Mybatis-Sonderzeichenverarbeitung, Verar...
Inhaltsverzeichnis Herkunft Status Quo Anfrage ab...
MySQL Master-Slave-Einrichtung Die Einstellungen ...
3D-Koordinatenkonzept Wenn sich ein Element dreht...
HTML-Semantik scheint ein alltägliches Problem zu...
In der Datenbank führen sowohl die Schlüsselwörte...
1. Installationsumgebung 1. HUAWEI Mate X CPU i5 ...
Nehmen Sie für eine neu erstellte Website ASP.NET...
Wenn Sie beim Konfigurieren von proxy_pass in ngi...