Die Eisernen Gesetze der MySQL-Datenbank (Zusammenfassung)

Die Eisernen Gesetze der MySQL-Datenbank (Zusammenfassung)

Gute Datenbankspezifikationen tragen dazu bei, die Komplexität der Softwareimplementierung zu verringern und die Kommunikationskosten zu senken. Diese eiserne Regel umfasst hauptsächlich die Verarbeitungskonventionen beim Erstellen von Datenbanken und Tabellen, beim Erstellen von Indizes, beim Schreiben von SQL, beim ORM-Mapping usw.

1. Das Eiserne Gesetz der Datenbankkonstruktion

- Eiserne Regel Ebene Bemerkung
Zeichensatz Verwenden Sie UTF-8. Wenn Sie Ausdrücke speichern, verwenden Sie utf8mb4 zur Speicherung. Durchsetzung
Sortierregeln Verwenden von utf8_general_ci Durchsetzung

2. Die eiserne Regel der Tabellenerstellung

- Eiserne Regel Ebene Bemerkung
Hinweise Feldanmerkungen sind ein Muss. Durchsetzung
Kodierung Verwenden Sie UTF-8. Wenn Sie Ausdrücke speichern, verwenden Sie utf8mb4 zur Speicherung. Durchsetzung
Ob das Begriffsfeld Muss is_xx heißen, der Datentyp ist vorzeichenloser Tinyint (1 für ja, 0 für nein), zum Beispiel is_deleted (1 für gelöscht, 0 für nicht gelöscht). Durchsetzung Jedes Feld muss vorzeichenlos sein, wenn es nicht negativ ist.
Tabellenname, Feldname Es dürfen nur Kleinbuchstaben, Unterstriche oder Zahlen verwendet werden. Der Name darf nicht mit einem Unterstrich oder einer Zahl beginnen. Zwischen zwei Unterstrichen dürfen nicht nur Zahlen stehen. Reservierte Wörter sind nicht zulässig. Tabellennamen dürfen keine Nomen im Plural enthalten. Durchsetzung
Benennung von Datenbank- und Tabellennamen Der Bibliotheksname sollte möglichst mit dem Anwendungsnamen übereinstimmen und der Tabellenname sollte mit der Funktion „Geschäftsname_Tabelle“ benannt werden. Durchsetzung
Indexbenennung Der Primärschlüsselindex verwendet den pk_field-Namen; der eindeutige Index verwendet den uk_field-Namen; der gemeinsame Index verwendet den idx_field-Namen. Durchsetzung pk_ ist der Primärschlüssel; uk_ ist der eindeutige Schlüssel; idx_ ist der Index
Dezimaltyp Der Datentyp ist dezimal. Float und Double sind verboten. Float und Double haben einen Genauigkeitsverlust. Wenn der gespeicherte Datenbereich den Dezimalbereich überschreitet, wird empfohlen, die Daten in Ganzzahlen und Dezimalzahlen aufzuteilen und diese separat zu speichern. Durchsetzung
varchar-Typ varchar ist eine Zeichenfolge mit variabler Länge, die keinen Speicherplatz vorab zuweist und nicht länger als 5.000 Zeichen sein sollte. Wenn die Länge 5.000 überschreitet, verwenden Sie Text (erstellen Sie eine separate Tabelle und verwenden Sie den entsprechenden Primärschlüssel, um die Indexeffizienz anderer Felder nicht zu beeinträchtigen). Durchsetzung
Der Tabellenname muss drei Felder haben id (Datentyp ist vorzeichenloser Bigint, einzelnes Tabelleninkrement, Schrittgröße ist 1), gmt_create, gmt_modified (aktive Erstellungszeit, passive Aktualisierungszeit, Datentyp ist datetime). Durchsetzung
Feldredundanz Felder dürfen angemessen redundant sein, aber die Datenkonsistenz muss berücksichtigt werden. Redundante Felder sollten 1) nicht häufig geändert werden; 2) keine VarChar-Ultralangfelder sein, geschweige denn Textfelder. empfehlen
Unterbibliothek und Untertisch Es wird empfohlen, die Datenbank und Tabellen nur dann zu teilen, wenn die Anzahl der Zeilen in einer einzelnen Tabelle 5 Millionen überschreitet oder die Kapazität einer einzelnen Tabelle 2 GB überschreitet. empfehlen

Durch Festlegen einer geeigneten Zeichenspeicherlänge können Sie nicht nur Datenbanktabellenspeicherplatz und Indexspeicher sparen, sondern – was noch wichtiger ist – die Abrufgeschwindigkeit verbessern.

3. Die eiserne Regel der Indizierung

- Eiserne Regel Ebene Bemerkung
Eindeutiger Index Felder, die im betriebswirtschaftlichen Sinne eindeutig sind, müssen eindeutig indexiert werden, auch wenn es sich um die Kombination mehrerer Felder handelt. Obwohl der eindeutige Index die Einfügegeschwindigkeit beeinflusst, kann dieser Verlust ignoriert werden, verbessert aber die Abfragegeschwindigkeit erheblich. Darüber hinaus werden, selbst wenn auf der Anwendungsebene eine sehr umfassende Überprüfungskontrolle durchgeführt wird, gemäß Murphys Gesetz zwangsläufig fehlerhafte Daten generiert, solange kein eindeutiger Index vorhanden ist. Durchsetzung
verbinden Es ist verboten, mehr als drei Tabellen zu verknüpfen. Die Datentypen der zu verknüpfenden Felder müssen konsistent sein. Achten Sie bei der Abfrage mehrerer Tabellen darauf, dass die verknüpften Felder Indizes haben. Achten Sie auch beim Verknüpfen zweier Tabellen auf Tabellenindizes und SQL-Performance. Durchsetzung
Erstellen eines Indexes für ein VARCHAR-Feld Die Indexlänge muss angegeben werden. Es ist nicht notwendig, das gesamte Feld zu indizieren. Die Indexlänge kann anhand der tatsächlichen Textdifferenzierung bestimmt werden. Indexlänge und Diskrimination sind widersprüchlich. Im Allgemeinen beträgt die Diskrimination eines Indexes mit einer Länge von 20 bei Stringdaten 90 % oder mehr. Sie können count(distinct left(column name, index length))/count(*) verwenden, um die Diskrimination zu bestimmen. Durchsetzung
Seitensuche verhindert Unschärfe Die Seitensuche kann nicht unscharf oder vollständig unscharf gelassen werden. Verwenden Sie bei Bedarf die Suchmaschine, um das Problem zu lösen. Verbotsgrund: Die Indexdatei verfügt über die am weitesten links stehende Präfixübereinstimmungsfunktion von B-Tree. Wenn der Wert auf der linken Seite nicht bestimmt wird, kann dieser Index nicht verwendet werden. Durchsetzung
Bestellen bis Wenn ein Order-by-Szenario vorliegt, achten Sie bitte auf die Reihenfolge des Index. Das letzte Feld in „Sort by“ ist Teil des zusammengesetzten Index und wird am Ende der zusammengesetzten Indexreihenfolge platziert, um File_Sort-Situationen zu vermeiden, die die Abfrageleistung beeinträchtigen. Positives Beispiel: wobei a=? und b=? nach c sortiert ist; der Index sollte als a_b_c erstellt werden; Negatives Beispiel: Wenn im Index eine Bereichssuche vorhanden ist, kann die Indexreihenfolge nicht verwendet werden, z. B. wobei a>10 nach b sortiert ist; der Index a_b kann nicht sortiert werden. empfehlen

4. Die eiserne Regel beim Schreiben von SQL

- Eiserne Regel Ebene Bemerkung
zählen(*) Verwenden Sie nicht count(Spaltenname) oder count(Konstante) anstelle von count(*). Count(*) ist die Standardsyntax zum Zählen von Zeilen, die in SQL92 definiert ist. Sie hat nichts mit der Datenbank zu tun und hat nichts mit NULL oder Nicht-NULL zu tun. count(*) zählt die Zeilen, deren Werte NULL sind, während count(Spaltenname) die Zeilen nicht zählt, deren Werte NULL sind. Durchsetzung
Anzahl (unterschiedliche Spalten) Zählt die Anzahl der eindeutigen Zeilen in dieser Spalte ohne NULL. Beachten Sie, dass count(distinct col1, col2) 0 zurückgibt, wenn eine der Spalten vollständig NULL ist, selbst wenn die andere Spalte unterschiedliche Werte hat. Durchsetzung
Summe(Spalte) Wenn alle Werte in einer Spalte NULL sind, gibt count (col) 0 zurück, aber sum (col) gibt NULL zurück. Daher müssen Sie bei der Verwendung von sum () auf NPE achten. Sie können das NPE-Problem vermeiden, indem Sie der folgenden Methode folgen: select if(isnull(sum(g)), 0, sum(g)) from table; Durchsetzung
ist null Verwenden Sie isnull(), um zu überprüfen, ob es sich um einen NULL-Wert handelt. NULL ist mit jedem beliebigen Wert vergleichbar. Durchsetzung
Paging-Abfragelogik Wenn die Anzahl 0 ist, sollte direkt zurückgekehrt werden, um die Ausführung der nachfolgenden Paging-Anweisungen zu vermeiden. Durchsetzung
Fremdschlüssel und Kaskadierung Fremdschlüssel und Kaskaden sind verboten und alle Fremdschlüsselkonzepte müssen auf der Anwendungsebene aufgelöst werden. Grund: Fremdschlüssel und Kaskaden sind für verteilte Cluster mit hoher Parallelität nicht geeignet. Kaskadenaktualisierungen werden stark blockiert und es besteht die Gefahr von Datenbankaktualisierungsstürmen. Fremdschlüssel beeinträchtigen die Einfügegeschwindigkeit der Datenbank. Durchsetzung
Gespeicherte Prozeduren Die Verwendung gespeicherter Prozeduren ist verboten. Gespeicherte Prozeduren sind schwer zu debuggen und zu erweitern und nicht portierbar. Durchsetzung
Datenkorrektur Beim Korrigieren von Daten (insbesondere beim Löschen oder Ändern von Datensätzen) müssen Sie zuerst eine Auswahl treffen, um ein versehentliches Löschen zu vermeiden, und die Aktualisierungsanweisung erst ausführen, nachdem Sie bestätigt haben, dass alles korrekt ist. Durchsetzung
In Vermeiden Sie nach Möglichkeit den in-Vorgang. Wenn dies nicht vermieden werden kann, sollte die Anzahl der Elemente in der Sammlung nach in auf 1000 begrenzt werden. empfehlen
Tabelle abschneiden Verwenden Sie Truncate Table nicht. Truncate Table ist schneller als Delete und verbraucht weniger System- und Protokollressourcen. Truncate hat jedoch keine Transaktion und löst keinen Trigger aus, was zu einem Unfall führen kann. Verwenden Sie diese Anweisung daher nicht im Entwicklungscode. siehe

5. Das Eiserne Gesetz des ORM-Mappings

- Eiserne Regel Ebene Bemerkung
Tabellenabfrage Es ist verboten, * als Feldliste für die Abfrage zu verwenden. Die erforderlichen Felder müssen leer sein. Durchsetzung
POJO Das Boolesche Attribut der POJO-Klasse kann nicht mit is hinzugefügt werden, aber das Datenbankfeld muss mit is hinzugefügt werden, was eine Zuordnung zwischen Feldern und Attributen in resultMap erfordert. Durchsetzung
Rückgabeparameter Es ist verboten, resultClass als Rückgabeparameter zu verwenden. Auch wenn alle Klassenattributnamen eins zu eins mit Datenbankfeldern übereinstimmen, müssen sie dennoch definiert werden; umgekehrt muss jede Tabelle ein entsprechendes Attribut haben. Grund: Konfigurieren Sie die Zuordnungsbeziehung, um das Feld zur einfacheren Wartung mit der DO-Klasse zu koppeln. Durchsetzung
Rückgabeparameter Es ist verboten, HashMap oder HashTable direkt als Ausgabe des Abfrageergebnissatzes zu verwenden. Ursache: Der Typ des Attributwertes ist nicht steuerbar. Durchsetzung
sql.xml-Konfigurationsparameter Verwenden Sie #{}, #param# für sql.xml-Konfigurationsparameter. Verwenden Sie nicht ${}, da ${} anfällig für SQL-Injection ist. Durchsetzung
Abfrage für Liste Es ist verboten, die von Mybatis bereitgestellte Funktion queryForList(String statementName, int start, int size) zu verwenden. Grund: Die Implementierungsmethode besteht darin, alle Datensätze der SQL-Anweisung abzurufen, die dem Anweisungsnamen in der Datenbank entsprechen, und dann die Untersammlung von Start und Größe über die Unterliste abzurufen. Durchsetzung
Letztes Update Beim Aktualisieren eines Datenbanktabellendatensatzes muss gleichzeitig die Änderungszeit des Datensatzes aktualisiert werden. Durchsetzung
Aktualisieren Sie die Datensätze der Datenbanktabelle Schreiben Sie keine große und umfassende Schnittstelle zur Datenaktualisierung (übergeben Sie eine POJO-Klasse). Aktualisieren Sie beim Ausführen von SQL keine unveränderten Felder. Gründe: Es ist fehleranfällig, ineffizient und erhöht den Binlog-Speicher. empfehlen
@Transaktional Missbrauchen Sie @Transactional-Transaktionen nicht. Transaktionen wirken sich auf die QPS der Datenbank aus. Darüber hinaus müssen bei der Verwendung von Transaktionen verschiedene Rollback-Lösungen in Betracht gezogen werden, darunter Cache-Rollback, Suchmaschinen-Rollback, Nachrichtenkompensation, statistische Korrektur usw. siehe
Dynamische SQL-Tags von Mybatis Der compareValue in <isEqual> ist eine Konstante, die mit dem Attributwert, normalerweise einer Zahl, verglichen wird, was bedeutet, dass die entsprechende SQL-Anweisung ausgeführt wird, wenn sie gleich sind; <isNotEmpty> bedeutet, dass es ausgeführt wird, wenn es nicht leer und nicht null ist; <isNotNull> bedeutet, dass es ausgeführt wird, wenn es nicht null ist. siehe

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des Befehls zum Bereinigen des MySQL-Datenbank-Binlogs
  • So vergleichen Sie zwei Datenbanktabellenstrukturen in MySQL
  • Beispiel zum Überprüfen der Kapazität einer MySQL-Datenbanktabelle
  • Vorgehensweise bei der Verwendung der MySQL-Systemdatenbank zur Diagnose der Leistungsbelastung
  • MySQL-Datenbank erstellen, Benutzer hinzufügen, Benutzerautorisierung, praktische Methode

<<:  So verwenden Sie Node.js, um festzustellen, ob ein PNG-Bild transparente Pixel hat

>>:  IIS-Konfiguration des Win Server 2019-Servers und einfache Veröffentlichung der Website

Artikel empfehlen

Analyse des HTML-Schreibstils und Gründe erfahrener Leute

1. Navigation: Ungeordnete Liste vs. andere Besch...

So stellen Sie ElasticSearch in Docker bereit

1. Was ist ElasticSearch? Elasticsearch wird eben...

4 Möglichkeiten, sich schnell Linux-Befehle selbst beizubringen

Wenn Sie ein Linux-Meister werden möchten, ist di...

Warum wird IE6 von den meisten Leuten verwendet?

In erster Linie bin ich Webdesigner. Genauer gesag...

Einführung in die JWT-Verifizierung mit Nginx und Lua

Inhaltsverzeichnis Vorwort Lua-Skript nignx.conf-...

Zehn Erfahrungen im Webdesign im Jahr 2008

<br />Das Internet verändert sich ständig un...

27 Linux-Befehle zum Bearbeiten von Dokumenten, die es wert sind, gesammelt zu werden

Linux-Befehl „col“ Der Linux-Befehl col wird zum ...

Lösen Sie schnell das Problem der chinesischen Eingabemethode unter Linux

Hintergrund: Ich arbeite derzeit an Funktionen fü...

Einfache Implementierung von HTML zum Erstellen eines persönlichen Lebenslaufs

Lebenslauf-Code: XML/HTML-CodeInhalt in die Zwisc...

jQuery erzielt den Effekt einer Werbung, die nach oben und unten gescrollt wird

In diesem Artikel wird der spezifische Code von j...

Detaillierte Beschreibung der Unicode-Signatur-BOM

Unicode-Signatur-BOM – Was ist die BOM? BOM ist di...