Einführung: Ich glaube, dass jeder einige Dokumente zu den MySQL-Datenbankspezifikationen gelesen hat. Dieser Artikel bietet eine detaillierte Zusammenfassung datenbankbezogener Spezifikationen, beginnend mit Entwurfsspezifikationen für Bibliotheken und Tabellennamen und dann mit Indexentwurfsspezifikationen, und liefert abschließend Vorschläge zum Schreiben von SQL. Ich bin davon überzeugt, dass diese Spezifikationen auf die meisten Unternehmen zutreffen und hoffe, dass jeder unsere Datenbank entsprechend den Spezifikationen nutzen kann, damit unsere Datenbank eine höhere Leistung erzielen kann. Über die Bibliothek: 1. [Obligatorisch] Der Bibliotheksname darf nicht länger als 32 Zeichen sein und alle englischen Zeichen müssen klein geschrieben sein. 2. [Obligatorisch] Das Namensformat der Bibliothek ist: Name des Geschäftssystems_Name des Subsystems. 3. [Obligatorisch] Bibliotheksnamen dürfen nur englische Buchstaben, Zahlen und Unterstriche enthalten und müssen mit einem englischen Buchstaben beginnen. 4. [Obligatorisch] Der Zeichensatz muss beim Erstellen einer Datenbank explizit angegeben werden und der Zeichensatz kann nur utf8 oder utf8mb4 sein. Beispiel zum Erstellen einer SQL-Datenbank: Datenbank db1 erstellen, Standardzeichensatz utf8; 5. [Vorschlag] Die Namen der temporären Datenbanken und Tabellen sollten mit „tmp_“ beginnen und das Datum als Suffix haben. Die Namen der Backup-Datenbanken und -Tabellen sollten mit „bak_“ beginnen und das Datum als Suffix haben. Über die Tabelle 1. [Obligatorisch] Die Namen von Tabellen und Spalten dürfen maximal 32 Zeichen lang sein. Tabellennamen dürfen nur Buchstaben, Zahlen und Unterstriche enthalten, alle in Kleinbuchstaben. 2. [Obligatorisch] Der Tabellenname muss eng mit dem Modulnamen verwandt sein. Tabellennamen, die im selben Modul verwendet werden, sollten möglichst ein einheitliches Präfix verwenden. 3. [Obligatorisch] Beim Erstellen einer Tabelle müssen Sie den Zeichensatz explizit als utf8 oder utf8mb4 angeben. 4. [Obligatorisch] Vermeiden Sie die Verwendung von Schlüsselwörtern (wie Typ, Reihenfolge usw.) in Spaltennamen. 5. [Obligatorisch] Beim Erstellen einer Tabelle müssen Sie den Typ der Tabellenspeicher-Engine explizit angeben. Wenn keine besonderen Anforderungen bestehen, wird immer InnoDB verwendet. 6. [Obligatorisch] Beim Erstellen einer Tabelle muss ein Kommentar eingefügt werden. 7. [Obligatorisch] Bei großen Tabellen mit mehr als 1 Million Zeilen müssen Änderungsvorgänge der Tabelle vom DBA überprüft und außerhalb der Spitzenzeiten ausgeführt werden. Mehrere Änderungsvorgänge müssen miteinander integriert werden. Denn durch „Alter Table“ wird eine Tabellensperre generiert, die während dieses Zeitraums alle Schreibvorgänge in die Tabelle blockiert, was erhebliche Auswirkungen auf das Geschäft haben kann. 8. [Vorschlag] In Bezug auf den Primärschlüssel beim Erstellen einer Tabelle: Die Tabelle muss einen Primärschlüssel haben (1) Der Primärschlüssel muss eine ID vom Typ int oder bigint und auto_increment sein. Es wird empfohlen, den vorzeichenlosen Typ zu verwenden. (2) Legen Sie das Feld, das den Betreff jeder Zeile in der Tabelle identifiziert, nicht als Primärschlüssel fest. Es wird empfohlen, es auf andere Felder wie user_id, order_id usw. festzulegen und einen eindeutigen Schlüsselindex zu erstellen. Denn wenn er als Primärschlüssel festgelegt ist und der Primärschlüsselwert zufällig eingefügt wird, führt dies zu einer internen Seitenaufteilung und einer großen Menge an zufälligen E/A-Vorgängen in InnoDB, was zu einer Leistungsverschlechterung führt. 9. [Vorschlag] Kerntabellen (wie etwa Benutzertabellen) müssen über ein Feld „create_time“ für die Erstellungszeit der Zeilendaten und ein Feld „update_time“ für die letzte Aktualisierungszeit verfügen, um die Problemprüfung zu erleichtern. 10. [Vorschlag] Alle Felder in der Tabelle sollten so weit wie möglich NOT NULL-Attribute haben, und das Unternehmen kann nach Bedarf DEFAULT-Werte definieren. Dies liegt daran, dass die Verwendung von NULL-Werten dazu führt, dass jede Zeile zusätzlichen Speicherplatz belegt, die Datenmigration fehleranfällig ist und die Berechnungsergebnisse der Aggregatfunktion abweichen. 11. [Vorschlag] Die Zwischentabelle wird zum Speichern des Zwischenergebnissatzes verwendet und ihr Name muss mit tmp_ beginnen. Die Sicherungstabelle wird zum Sichern oder Erfassen eines Snapshots der Quelltabelle verwendet. Der Name muss mit bak_ beginnen. Die Zwischentabellen und Sicherungstabellen werden regelmäßig bereinigt. 12. [Demonstration] Eine standardisiertere Anweisung zur Tabellenerstellung: : : : : : : : : : : : : : : : Über Index 1. [Obligatorisch] Der Primärschlüssel der InnoDB-Tabelle muss die ID int/bigint auto_increment sein und der Primärschlüsselwert kann nicht aktualisiert werden. 2. [Obligatorisch] Für InnoDB- und MyISAM-Speicher-Engine-Tabellen muss der Indextyp BTREE sein. 3. [Empfehlung] Der Name des Primärschlüssels sollte mit pk_ beginnen, der eindeutige Schlüssel mit uniq_ oder uk_ und der gemeinsame Index mit idx_. Alle Namen sollten in Kleinbuchstaben angegeben werden und den Namen oder die Abkürzung des Felds als Suffix enthalten. 4. [Vorschlag] Die Anzahl der Indizes einer einzelnen Tabelle darf 8 nicht überschreiten. 5. [Vorschlag] Erwägen Sie beim Erstellen eines Index die Erstellung eines gemeinsamen Index und platzieren Sie das diskriminierendste Feld an den Anfang. Beispielsweise kann die Unterscheidbarkeit der Spalte „UserID“ durch „Select count(distinct userid)“ berechnet werden. 6. [Vorschlag] Stellen Sie im SQL für Mehrfachtabellenverknüpfungen sicher, dass die Verknüpfungsspalten der gesteuerten Tabelle Indizes haben, um die Effizienz der Verknüpfungsausführung zu maximieren. 7. [Vorschlag] Stellen Sie beim Erstellen einer Tabelle oder Hinzufügen eines Index sicher, dass die Tabelle keine redundanten Indizes enthält. SQL-Schreiben 1. [Obligatorisch] Die SELECT-Anweisung auf der Programmseite muss den spezifischen Feldnamen angeben. Das Schreiben von * ist verboten. 2. [Obligatorisch] Geben Sie den spezifischen Feldnamen in der programmseitigen Insert-Anweisung an. Schreiben Sie ihn nicht als „insert into t1 values(…).“ 3. [Obligatorisch] Mit Ausnahme von statischen Tabellen oder kleinen Tabellen (mit weniger als 100 Zeilen) müssen DML-Anweisungen eine Where-Bedingung haben und die Indexsuche verwenden. 4. [Obligatorisch] Die Feldtypen auf beiden Seiten des Gleichheitszeichens in der Where-Bedingung müssen konsistent sein, sonst kann der Index nicht verwendet werden. 5. [Obligatorisch] In der WHERE-Klausel dürfen Sie für die Suche nicht nur die vollständig unscharfe LIKE-Bedingung verwenden. Sie müssen andere Gleichheits- oder Bereichsabfragebedingungen haben. Andernfalls kann der Index nicht verwendet werden. 6. [Obligatorisch] Verwenden Sie keine Funktionen oder Ausdrücke in Indexspalten, da der Index sonst nicht verwendet werden kann. Beispielsweise wobei length(name)='Admin' oder wobei user_id+2=10023. 7. [Vorschlag] einfügen in … Werte (XX), (XX), (XX) … Der Wert von XX sollte hier 5000 nicht überschreiten. 8. [Vorschlag] Verwenden Sie UNION nicht in der SELECT-Anweisung. Es wird empfohlen, UNION ALL zu verwenden und die Anzahl der UNION-Klauseln auf 5 zu begrenzen. 9. [Obligatorisch] Cross-DB-Join-Anweisungen sind verboten. 10. [Vorschlag] Die Verwendung von Unterabfragen wird nicht empfohlen. Es wird empfohlen, die Unterabfrage-SQL in mehrere mit dem Programm kombinierte Abfragen aufzuteilen oder anstelle von Unterabfragen einen Join zu verwenden. 11. [Vorschlag] Nehmen Sie in einer Online-Umgebung an nicht mehr als 5 Tischen teil. 12. [Vorschlag] Versuchen Sie bei Verknüpfungen mehrerer Tabellen, eine Tabelle mit einem kleineren Ergebnissatz als treibende Tabelle für die Verknüpfung anderer Tabellen auszuwählen. 13. [Vorschlag] Bei der Stapelverarbeitung von Daten ist es erforderlich, das Transaktionsverarbeitungsintervall zu steuern und den erforderlichen Ruhezustand durchzuführen. 14. [Vorschlag] Die Transaktion sollte nicht mehr als 5 SQL-Anweisungen enthalten, da eine zu lange Transaktion dazu führt, dass Daten für längere Zeit gesperrt werden und Probleme wie eine übermäßige Nutzung des internen MySQL-Cache und der Verbindungen auftreten. 15. [Vorschlag] Update-Anweisungen in Transaktionen sollten so weit wie möglich auf Primärschlüsseln oder eindeutigen Schlüsseln basieren, z. B. „update … where id=XX;“ 16. [Vorschlag] Reduzieren Sie die Verwendung der Sortierfunktion, kommunizieren Sie mit dem Unternehmen, um das Sortieren nach Möglichkeit zu vermeiden, oder verschieben Sie das Sortieren an das Programmende. Anweisungen wie „order by“, „group by“ und „distinct“ verbrauchen viel CPU und die CPU-Ressourcen der Datenbank sind äußerst wertvoll. 17. [Vorschlag] Versuchen Sie für SQL-Anweisungen wie „order by“, „group by“ und „distinct“, Indizes zu verwenden, um sortierte Daten direkt abzurufen. Wenn beispielsweise a = 1 ist, kann für die Reihenfolge b der Schlüssel (a,b) verwendet werden. 18. [Vorschlag] Beschränken Sie bei Anweisungen, die „order by“, „group by“ und „distinct“ enthalten, den durch die Where-Bedingung gefilterten Ergebnissatz auf 1.000 Zeilen, da SQL sonst sehr langsam ist. Oben finden Sie den detaillierten Inhalt der MySQL-Datenbanknutzungsspezifikationen. Weitere Informationen zu MySQL-Nutzungsspezifikationen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So implementieren Sie Datenpersistenz mit dem Vuex-Drittanbieterpaket
>>: React+Typescript implementiert die Countdown-Hook-Methode
Ich habe vor Kurzem VMware Horizon bereitgestellt...
Inhaltsverzeichnis 1. Geltungsbereich 1. Globaler...
RedHat6.5 Installation MySQL5.7 Tutorial teilen, ...
Der Zweck der Einrichtung eines MySQL-Abfragecach...
Zabbix-Serverumgebungsplattform ZABBIX Version 4....
Hier ist ein mit CSS 3.0 implementierter Textschw...
<br />Die Benutzererfahrung wird von chinesi...
HTML-Kommentarfeld mit Emoticons. Die Emoticons w...
Körperteil: <button>Licht ein-/ausschalten&...
Inhaltsverzeichnis LAMP-Architektur 1.Lampeneinfü...
Nach dem Start initialisiert der Worker-Prozess z...
Vorwort Workbench ist auf einem Computer installi...
Über JS, CSS CSS: Stylesheet oben Vermeiden Sie C...
<br />Ich habe festgestellt, dass viele Leut...
Problemhintergrund: Wenn Sie Docker zum Bereitste...